【问题标题】:Read all remaining bytes in a file读取文件中所有剩余的字节
【发布时间】:2014-05-25 13:07:19
【问题描述】:

我知道我可以使用Files.readAllBytes 读取文件的所有字节。但是,如果我已经阅读了其中的一些并且我想阅读剩余的字节怎么办。我知道我可以定义一个 byte[] 并使用 FileReader.read 循环所有字节,但我想尽可能避免循环并一次性读取所有剩余字节。

【问题讨论】:

  • 你想要怎样的数据?在字节 [] 或字节缓冲区中?还是您想要其他形式?
  • 任何一个,只要它只读一次。

标签: java file-io io


【解决方案1】:

尝试使用InputStream#skip() 跳过并丢弃此输入流中的 n 字节数据。

使用File#length() 返回此抽象路径名表示的文件的长度(以字节为单位)。


或者尝试使用从输入流中读取字节的org.apache.commons.io.IOUtils.read()

【讨论】:

  • 1.我不想丢弃所以不要跳过。 2. File.length 没有帮助,因为我可能不知道我已经读了多少。 3.我需要路径剩余的长度,我如何得到它?另一方面,我想坚持使用标准 API,但如果这是唯一的方法,我别无选择。
  • 试一试没有坏处。
【解决方案2】:

没有从文件中读取操作保证在一次调用中读取全部剩余内容。如果你有 FileInputStream,你可以得到一个 FileChannel,它会告诉你当前的position。您还将知道大小,因此您可以计算剩余的数据量。然后,您可以为剩余的大小设置一个 byte[] 或 ByteBuffer 并读取内容。但是读取必须处于循环中,因为单个读取调用可能不会读取所有请求的数据。

如果您有一个文件通道,您可以map 文件的其余部分,这将使您能够以字节缓冲区的形式访问文件的其余部分。但是,您计划如何访问这些数据很重要,因为这是一个直接字节缓冲区,并且使用的内存位于本机空间中。在 jvm 内部的任何使用都需要跨越 jni 边界。

【讨论】:

    猜你喜欢
    • 2021-04-12
    • 2020-09-05
    • 2019-03-02
    • 1970-01-01
    • 2012-10-05
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多