gpt4 book ai didi

java - IOUtils.toByteArray(inputStream) 方法是否在内部关闭 inputStream 对象?

转载 作者:行者123 更新时间:2023-12-01 17:47:40 32 4
gpt4 key购买 nike

这是我的代码流程,文件内容丢失,我认为可能是 IOUtils.toByteArray() 行有问题,请指导这里实际出了什么问题。

文件内容丢失:

InputStream stream = someClient.downloadApi(fileId);
byte[] bytes = IOUtils.toByteArray(stream);
String mimeType = CommonUtils.fileTypeFromByteArray(bytes);
String fileExtension=FormatToExtensionMapping.getByFormat(mimeType).getExtension();
String filePath = configuration.getDownloadFolder() + "/" ;
String fileName = UUID.randomUUID() + fileExtension;
File file = new File(filePath+fileName);
file.createNewFile();
FileUtils.copyInputStreamToFile(stream,file);
int length = (int)file.length();

现在这里的长度值为0基本上没有内容。让我告诉您,从 downloadApi() 收到的 inputStream 确实包含给定的内容。但是如果我尝试在代码中进行以下修改,那么我将获得文件的长度。

文件内容不会丢失:

InputStream stream = someClient.downloadApi(fileId);
byte[] bytes = IOUtils.toByteArray(stream);
String mimeType = CommonUtils.fileTypeFromByteArray(bytes);
String fileExtension=FormatToExtensionMapping.getByFormat(mimeType).getExtension();
String filePath = configuration.getDownloadFolder() + "/" ;
String fileName = UUID.randomUUID() + fileExtension;
stream = new ByteArrayInputStream(bytes); //Again converted bytes to stream
File file = new File(filePath+fileName);
file.createNewFile();
FileUtils.copyInputStreamToFile(stream,file);
int length = (int)file.length();

现在我正在获取文件内容。有人可以告诉我第一个代码片段在技术上有什么问题吗?

TIA

最佳答案

不,没有。

代码的第一个版本(在下面复制并添加了一些注释)失败,因为您正在读取已经位于流位置末尾的流。

InputStream stream = someClient.downloadApi(fileId);

// This reads the entire stream to the end of stream.
byte[] bytes = IOUtils.toByteArray(stream);

String mimeType = CommonUtils.fileTypeFromByteArray(bytes);
String fileExtension =
FormatToExtensionMapping.getByFormat(mimeType).getExtension();
String filePath = configuration.getDownloadFolder() + "/" ;
String fileName = UUID.randomUUID() + fileExtension;
File file = new File(filePath+fileName);
file.createNewFile();

// Now you attempt to read more data from the stream.
FileUtils.copyInputStreamToFile(stream,file);

int length = (int)file.length();

当您尝试从流末尾的流进行复制时,您会得到...零字节。这意味着您会得到一个空的输出文件。

关于java - IOUtils.toByteArray(inputStream) 方法是否在内部关闭 inputStream 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53281591/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com