gpt4 book ai didi

java - 读(字节[] b,int off,int len): Reading A File To Its End

转载 作者:行者123 更新时间:2023-11-30 08:22:25 25 4
gpt4 key购买 nike

前提

我是 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 字符, 并相应地打印出来。 代码的最后两部分对于所有意图和目的都是“正确的”:因为代码已经适本地做出决定并相应地打印 - 这不是我的问题的前提。

假设 filelength() 大于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com