【发布时间】:2018-11-13 13:01:38
【问题描述】:
这是我的文件内容丢失的代码流,我认为可能是 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();
现在我正在获取文件内容。有人能说出第一个代码 sn-p 在技术上的问题吗?
TIA
【问题讨论】:
-
我将首先:转储
toByteArray()的结果。你的第二个例子看起来很奇怪,它实际上不应该做任何事情。您不能“重置”流...不要选择“文件长度”,请检查写入磁盘的 内容。 -
另外,
ByteArrayInputStream真的将InputStream作为输入吗? -
@GhostCat 是的,我检查了下载的文件,它的第一个 sn-p 有
no content,但有第二个 sn-p 的内容。长度只是说明它没有内容的例子。 -
@CS_noob 谢谢!相应地更新了代码。
标签: java inputstream bytearrayinputstream ioutils