- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码流程,文件内容丢失,我认为可能是 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/
BigInteger i = new BigInteger("1000"); Byte[] arr = i.toByteArray(); Contents of arr: [3, -24] 由于jav
我在下面的代码行中收到 OOM 错误。有办法解决吗?我尝试增加堆大小但没有用。 FileInputStream inputDoc = new FileInputStream(inputDoc1); b
我正在将 poi 工作簿写入 ByteArrayOutputStream,以便获取字节并在肥皂消息中发送它们。 获取ByteArrayOutputStream很好,但是调用.toByteArray()
我需要从发送到输出流的所有内容中获取字节数组。但我却得到了 4 个字节的垃圾。为什么? ByteArrayOutputStream byteArrayOutputStream = new ByteAr
我正在尝试为我重构的方法编写 Junit 测试,以确保该方法仍按预期运行。我注意到一些我无法弄清楚的奇怪行为。 为什么 Java ByteArrayOutputStream.toByteArray()
在我的 Android 应用程序中,我将数据存储在 ByteArrayOutputStream 中(目前最大约为 1 MB),我想将其传递给 DataOutputStream。 最明显的方法当然是调用
我在 android 上编写应用程序,它将 xml 文件发送到 PHP 服务器。这是我的代码: InputStream is = new FileInputStream(file); HttpClie
我尝试压缩超过 100Mb 的大型视频文件。 public static void compress(File input, File output) throws IOException {
我可能只是弄乱了原型(prototype)文件中的某些内容,但我似乎无法调用 toByteArray 函数。 使用 Java,proto 文件是用 protoc 编译的。 我在叫什么... BaseM
我正在将 bigints 转换为二进制、radix16 和 radix64 编码,并看到神秘的 msb 零填充。这是一个大整数问题,我可以通过去除零填充或做其他事情来解决吗? 我的测试代码:
我想将 Guid 存储在不支持 Guid/uniqueidentifier 数据类型的数据库中,因此我使用 .ToByteArray() 方法将 Guid 转换为字节数组。但是,此方法以一种奇怪的方式
我正在尝试优化下面的代码,是否可以直接将 ScreenCap 转换为字节数组,以便我可以跳过将其保存到内存中的步骤。 Process sh = Runtime.getRuntime().exec("s
我正在开发一个 spring boot 应用程序,需要使用 IOUtils 提供的 toByteArray 方法,但它已被弃用。在 spring boot 应用程序中使用 string.getByte
我正在使用 spring boot。我有一个使用字节数组返回文件的方法。当我试图返回 byteArray 时,我得到了这个错误。我的代码在下面给出- @GetMapping( value
我正在尝试在我的 Android 应用程序中编译此代码示例以具有加密/解密功能。我在这里找到了代码 http://apachejava.blogspot.it/2012/04/androidencry
我正在构建一个需要 Facebook 登录和身份验证的应用。 我在关注 https://developers.facebook.com/docs/android/getting-started#cre
当您在 .NET 中的 GUID 上调用 ToByteArray() 时,与 GUID 的字符串表示形式相比,结果数组中的字节顺序不是您所期望的。例如,对于以下表示为字符串的 GUID: 112233
这是我的代码 fragment : File file = new File("encryptedImageFileName"); byte[] encryptedBytes = null; try
我最近尝试从 inputStream 读取数据。 int length = getHeader("Content-Length"); byte[] buffer = new byte [length]
我正在试验具有随机值的 BigIntegers。 BigInteger bi1 = new BigInteger("365375409332725729550921208179070754913983
我是一名优秀的程序员,十分优秀!