只读取大小数组的倍数的特殊输入流
Special input stream that will read only multiple of size array
我需要使用 java 在原始模式下读取 CD/DVD 驱动器。我知道该怎么做(使用像 \.\E:\ 这样的 unc 路径),并且我可以读取一些数据。但是如果我想跳过大量数据,它会因为文件缓冲和对齐而失败,正如微软在此处指定的那样:https://docs.microsoft.com/en-us/windows/win32/fileio/file-buffering
我的扇区大小是 2048 字节,如果我读取 2048 字节或者如果我跳过 2048 字节的倍数,它就可以工作。
我正在使用 8192 字节的缓冲输入流 reader,它确实是 2048 的倍数。
但是如果我需要跳过一个非整数倍的字节,下一次读取就会失败。
是否有始终向基础文件发出 2048 字节读取的输入流?
java 关于一般输入流和 FileInputStream
/ Files.newInputStream
工作方式的规范未指定到您可以保证 它会告诉底层 OS 驱动程序精确读取 2048 字节。从这个意义上说,您的问题可以简单地回答:不,没有输入流会始终向基础文件发出 2048 字节的读取。
然而,在实践中,在资源上的新打开的未包装 new FileInputStream
上调用 read(someByteArr)
,其中 someByteArr
恰好是 2048 字节大小,真的应该总是做你想要,即使规范不能完全保证这一点。编写始终调用 2048 的倍数的读取(或跳过)方法的代码,并公开进一步的 API,让您在需要时读取其中的较小部分。
请注意,链接文档深入研究了 OS 特定的细节,达到了 java 不允许您这样做的程度(并非没有求助于所谓的 native
代码;你不想去那里,相信我)。 Java 并不是真正适合这里工作的工具。
我需要使用 java 在原始模式下读取 CD/DVD 驱动器。我知道该怎么做(使用像 \.\E:\ 这样的 unc 路径),并且我可以读取一些数据。但是如果我想跳过大量数据,它会因为文件缓冲和对齐而失败,正如微软在此处指定的那样:https://docs.microsoft.com/en-us/windows/win32/fileio/file-buffering
我的扇区大小是 2048 字节,如果我读取 2048 字节或者如果我跳过 2048 字节的倍数,它就可以工作。 我正在使用 8192 字节的缓冲输入流 reader,它确实是 2048 的倍数。
但是如果我需要跳过一个非整数倍的字节,下一次读取就会失败。
是否有始终向基础文件发出 2048 字节读取的输入流?
java 关于一般输入流和 FileInputStream
/ Files.newInputStream
工作方式的规范未指定到您可以保证 它会告诉底层 OS 驱动程序精确读取 2048 字节。从这个意义上说,您的问题可以简单地回答:不,没有输入流会始终向基础文件发出 2048 字节的读取。
然而,在实践中,在资源上的新打开的未包装 new FileInputStream
上调用 read(someByteArr)
,其中 someByteArr
恰好是 2048 字节大小,真的应该总是做你想要,即使规范不能完全保证这一点。编写始终调用 2048 的倍数的读取(或跳过)方法的代码,并公开进一步的 API,让您在需要时读取其中的较小部分。
请注意,链接文档深入研究了 OS 特定的细节,达到了 java 不允许您这样做的程度(并非没有求助于所谓的 native
代码;你不想去那里,相信我)。 Java 并不是真正适合这里工作的工具。