- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Java 中的 Steam 新手,我发现我的问题至少看起来与之前提出的问题不同。这是此时我的代码片段(代码更像是概念证明):
try {
//file is initialized to the path contained in the command-line args.
File file = new File(args[0]);
inputStream = new FileInputStream(file);
byte[] byteArray = new byte[(int)file.length()];
int offset = 0;
while (inputStream.read(byteArray, offset, byteArray.length - offset) != -1) {
for (int i = 0; i < byteArray.length; i++) {
if (byteArray[offset + i] >=32 && byteArray[offset + i] <= 126) {
System.out.print("#");
} else {
System.out.print("@");
}
//offset = byteArray.length - offset;
}
}
我的目标是:创建一个只读取 80 字节输入的程序(数字是任意的 - 让它是 x),决定该段中的每个字节是否代表一个 ASCII 字符, 并相应地打印出来。 代码的最后两部分对于所有意图和目的都是“正确的”:因为代码已经适本地做出决定并相应地打印 - 这不是我的问题的前提。
假设 file
的 length()
大于 80 个字节,而我希望 - 同时只读取 80 个字节的输入 - 达到 EOF ,即输入文件的全部内容。打印到控制台的每一行只能包含 80 或 x 字节的内容。 我知道要调整偏移量并且一直在修改它;然而,当我遇到 EOF 时,我不想编程崩溃和燃烧 - 可以这么说“爆炸”。
当遇到 EOF 时,如何确保捕获的字节仍然被读取并且 for
循环中的代码仍然被执行?
例如,将上面的inputStream.read()
改成:
inputStream.read(byteArray, offset, 80)
如果在读取文件中的最后一个字节时遇到文件结尾 (EOF),这将“炸弹”。例如,如果我尝试读取 80 个字节,但只剩下 10 个字节。
最佳答案
read 的返回值告诉您读取的字节数。这将是 <= length
的值。仅仅因为文件大于 length
并不意味着对 length
字节数的请求实际上会导致将那么多字节读入您的 byte[]
。
当返回 -1
时,表示 EOF。它还表明没有数据被读入您的 byte[]
。
关于java - 读(字节[] b,int off,int len): Reading A File To Its End,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24398368/
我是一名优秀的程序员,十分优秀!