Java 如何读取作为链的Base64文件?

Java 如何读取作为链的Base64文件?,java,base64,Java,Base64,我目前正在开发一个REST服务,该服务在其请求中接收一个字段,并在该字段中传递一个base64格式的文件(“n”字符)。我在服务逻辑中所做的是将该字符串转换为文件,以将其保存在预定路径中 但问题是,当文件太大(3MB)时,服务速度会变慢,需要很长时间才能响应 这是我正在使用的代码: String filename=“TEXT.DOCX” BufferedOutputStream=null; //字段base64file是来自请求64的基本格式字符串 byte[]fileByteArray=jav

我目前正在开发一个REST服务,该服务在其请求中接收一个字段,并在该字段中传递一个base64格式的文件(“n”字符)。我在服务逻辑中所做的是将该字符串转换为文件,以将其保存在预定路径中

但问题是,当文件太大(3MB)时,服务速度会变慢,需要很长时间才能响应

这是我正在使用的代码:

String filename=“TEXT.DOCX”
BufferedOutputStream=null;
//字段base64file是来自请求64的基本格式字符串
byte[]fileByteArray=java.util.Base64.getDecoder()。解码(base64file);
//有效文件大小

如果((1*1024*1024缓冲不能提高您的性能,因为您所要做的只是尽可能快地写入文件。通常情况下,它看起来很好,请将代码更改为直接使用FileOutputStream,并查看它是否能提高性能:

try (FileOutputStream stream = new FileOutputStream(path)) {
    stream.write(bytes);
}
或者,您也可以尝试使用Apache Commons之类的工具为您完成任务:


FileUtils.WriteByteArrayFile(新文件(路径),字节);

尝试以下操作,对于大文件也是如此

Path outPath = Paths.get(filename);
try (InputStream in = Base64.getDecoder ().wrap(base64file)) {
    Files.copy(in, outPath);
}
这只在内存中保留一个缓冲区。由于占用了更多内存,代码可能会变慢


wrap
接受您应该提供的输入流,而不是整个字符串。

从网络的角度来看: json和xml都可以支持大量的数据交换。而且,3MB并不是很大。但是,浏览器可以处理的数据量有一个限制(如果这个调用来自用户界面)。 此外,像Tomcat这样的web服务器在默认情况下具有处理2MB的属性(检查maxPostSize)

您还可以尝试对请求负载进行分块(尽管3MB文件不需要分块)

从实施的角度来看: 磁盘上的写入操作可能很慢。这也取决于操作系统。 如果您的文件非常大,那么可以将Java FileChannel类与ByteBuffer一起使用

要了解缓慢的原因(网络延迟或代码),请使用简单的Java程序对照web服务调用检查性能