读取文件中的所有剩余字节

时间:2014-05-25 13:07:20

标签: java file-io io

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

2 个答案:

答案 0 :(得分:0)

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

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


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

答案 1 :(得分:0)

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

如果您有文件频道,则可以map文件的其余部分,这样您就可以访问文件的其余部分作为ByteBuffer。但是,如何计划访问此数据非常重要,因为这是一个直接的字节缓冲区,并且所使用的内存位于本机空间中。任何来自jvm内部的使用都需要越过jni边界。