gpt4 book ai didi

java - 使用 Scanner 时使用 InputStream 读取

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

我想以两种不同的方式从客户端的inputstream读取:

1:在inputstream上使用Scanner来读取字符串。

2:使用InputStream对象本身来读取带有缓冲区的文件。

首先,我想读取一段文本,它给出文件的名称和大小,在我的例子中:“文件:名称:...”,“文件:大小:...”。

当我获得此信息时,InputStream 应该实际读取该文件。问题是,我尝试使用 InputStream 对象读取“scanner.hasNextLine()”循环中的文件,但这会导致 InputStream.read () 方法返回 -1 或 EOS。我已将问题降至最低限度,因此您只需回答我这个问题即可:

为什么这里的读取方法返回-1:

if (scanner.hasNextLine()) {        
System.out.println(inputstream.read());
}

最佳答案

作为Oracle Documentation对于 Scanner.hasNextLine() 状态,此方法不会推进 Scanner。这意味着您可以不断地使用 Scanner 查看文件的第一行,同时推进您的 InputStream。这意味着即使 Scanner 有下一行,InputStream 也可能没有。您似乎正在使用 InputStream 走出文件末尾。

如果您不将 Scanner 与输入流一起推进,您就无法知道 Scanner 正在查看文件中的同一位置。无论如何,使用 ScannerInputStream 同时读取一个文件是值得怀疑的。

考虑重构您的代码以仅使用其中之一。

如果您想将文件的全部内容读取到单个String中,请考虑以下操作:

static String readFile(String path, Charset encoding) 
throws IOException
{
byte[] encoded = Files.readAllBytes(Paths.get(path));
return new String(encoded, encoding);
}

以及来自 How do I create a Java string from the contents of a file? 的其他方法

关于java - 使用 Scanner 时使用 InputStream 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31885584/

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