io - DataInputStream.skipBytes(n) 什么时候不能跳过 n 个字节?

标签 io java

Sun Documentation for DataInput.skipBytes指出它“试图从输入流中跳过 n 个字节的数据,并丢弃跳过的字节。但是,它可能会跳过一些较小数量的字节,可能为零。这可能是由多种情况中的任何一种引起的;在跳过 n 个字节之前到达文件末尾只是一种可能性。”

  1. 除了到达文件末尾,为什么 skipBytes() 不能跳过正确的字节数? (我使用的 DataInputStream 将包装一个 FileInputStream 或一个 PipedInputStream。)

  2. 如果我确实想跳过 n 个字节并抛出一个 EOFException 如果这导致我转到文件末尾,我应该使用 readFully() 并忽略生成的字节数组?还是有更好的方法?

最佳答案

1) 可能没有那么多数据可供读取(管道的另一端可能还没有发送那么多数据),并且实现类可能是非阻塞的(即它只会返回它可以返回的数据) ,而不是等待足够的数据来满足请求)。

不过,我不知道是否有任何实现实际上以这种方式运行,但接口(interface)设计为允许这样做。

另一种选择是文件在读取过程中被关闭。

2) readFully()(它将始终等待足够的输入否则失败)或在循环中调用 skipBytes()。我认为前者可能更好,除非数组真的很大。

关于io - DataInputStream.skipBytes(n) 什么时候不能跳过 n 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51380/

相关文章:

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

python - 打开已经打开的文件不会引发异常

Python,如何删除文件中的工作?

java - 富 Ajax 应用程序的 CSRF token 生成

java - 为什么Android studio上找不到小程序?

c - 将一些数据写入文件后出现段错误

c - 如何处理基于 C 的应用程序内部的数据流?

java - Jruby、JDBC、Netezza

java - 适用于 Clojure Web 应用程序的良好 Web 服务器/Servlet 容器?

java - 我的代码抛出 org.hibernate.ObjectDeletedException 异常