Sun Documentation for DataInput.skipBytes指出它“试图从输入流中跳过 n 个字节的数据,并丢弃跳过的字节。但是,它可能会跳过一些较小数量的字节,可能为零。这可能是由多种情况中的任何一种引起的;在跳过 n 个字节之前到达文件末尾只是一种可能性。”
除了到达文件末尾,为什么
skipBytes()
不能跳过正确的字节数? (我使用的DataInputStream
将包装一个FileInputStream
或一个PipedInputStream
。)如果我确实想跳过 n 个字节并抛出一个
EOFException
如果这导致我转到文件末尾,我应该使用readFully()
并忽略生成的字节数组?还是有更好的方法?
最佳答案
1) 可能没有那么多数据可供读取(管道的另一端可能还没有发送那么多数据),并且实现类可能是非阻塞的(即它只会返回它可以返回的数据) ,而不是等待足够的数据来满足请求)。
不过,我不知道是否有任何实现实际上以这种方式运行,但接口(interface)设计为允许这样做。
另一种选择是文件在读取过程中被关闭。
2) readFully()(它将始终等待足够的输入否则失败)或在循环中调用 skipBytes()。我认为前者可能更好,除非数组真的很大。
关于io - DataInputStream.skipBytes(n) 什么时候不能跳过 n 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51380/