我知道我可以使用Files.readAllBytes
读取文件的所有字节。但是,如果我已经阅读了一些内容并且我想读取剩余的字节,该怎么办?我知道我可以定义一个byte[]
并使用FileReader.read
遍历所有字节,但我想尽可能避免循环并一次性读取所有剩余字节。
答案 0 :(得分:0)
尝试使用跳过的InputStream#skip()并从此输入流中丢弃n个字节的数据。
使用File#length()返回此抽象路径名表示的文件的长度(以字节为单位)。
或者尝试使用org.apache.commons.io.IOUtils.read()从输入流中读取字节。
答案 1 :(得分:0)
文件中没有读取操作,保证在一次调用中读取整个剩余内容。如果你有FileInputStream,你可以得到一个FileChannel,它会告诉你当前的position。您还将知道大小,以便计算剩余的数据量。然后,您可以为该剩余大小调整byte []或ByteBuffer的大小并读取内容。但是读取必须处于循环中,因为单个读取调用可能无法读取所有请求的数据。
如果您有文件频道,则可以map文件的其余部分,这样您就可以访问文件的其余部分作为ByteBuffer。但是,如何计划访问此数据非常重要,因为这是一个直接的字节缓冲区,并且所使用的内存位于本机空间中。任何来自jvm内部的使用都需要越过jni边界。