【问题标题】:Byte array to File object without saving to disk字节数组到文件对象而不保存到磁盘
【发布时间】:2022-01-25 20:19:27
【问题描述】:

我有一个方法在 .txt.docx 文件的代码的不同部分接收来自 Files.readAllBytes()byte[]。我想从字节创建一个新的File 对象,以便以后从中读取内容,而不将该文件保存到磁盘。这可能吗?还是有更好的方法从文件字节中获取内容?

【问题讨论】:

  • 如果您不想与文件交互,请不要使用File。传递Byte[] 或创建自己的包装数据的类。
  • 如何从文件字节中获取内容?
  • 字节内容。
  • 我得到了文本文件,但其他文件类型,如 .docx 和 .xlsx 呢?
  • 一个文件只包含字节。无论文件类型如何,内容都是字节。

标签: java file byte


【解决方案1】:

这不是它的工作原理。 java.io.File 对象是一个轻量级包装器:查看 source code - 它有一个包含路径的 String 字段,除了一些簿记内容之外,这就是它的全部内容。

不可能用 java.io.File 对象表示任意数据j.i.File 对象代表磁盘上的文字文件,不能代表任何其他内容。

Files.readAllBytes 从字节中获取内容,这就是该方法具有该名称的原因。

通常的解决方案是,某个库中的某个接受 File 的方法被重载;还有一种方法采用byte[],或者,如果不存在,一种采用InputStream的方法(您可以轻松地从byte[]创建一个IS:new ByteArrayInputStream(byteArr)将完成这项工作)。

如果您使用的 API 不包含任何此类方法,则它是一个糟糕的 API,您应该找到其他方法,或者咬紧牙关接受您使用的是错误的 API,以及所有解决方法意味着,包括必须将字节保存到磁盘只是以满足 asinine API。

但是先看;我敢打赌有一个byte[] 和/或InputStream 变体(或者可能是URLByteBufferByteStream 或其他一些更奇特的变体)。

【讨论】:

  • 我不知道为什么,但我从来没有考虑过找到一个可以处理字节而不是 File 对象的库,所以我来看看。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 2017-04-11
  • 2021-04-13
相关资源
最近更新 更多