gpt4 book ai didi

java - 服务器无法读取全部内容

转载 作者:行者123 更新时间:2023-12-01 12:00:30 25 4
gpt4 key购买 nike

我有一个 servlet,它通过 POST 方法接收一个大的 JSON 字符串(> 10,000 个字符)。

如果我像这样阅读请求的内容:

try(Reader reader = new InputStreamReader(new BufferedInputStream(request.getInputStream()), StandardCharsets.UTF_8))
{
char[] buffer = new char[request.getContentLength()];
reader.read(buffer);
System.out.println(new String(buffer));
}

我没有得到全部内容!缓冲区大小正确。但创建的字符串的长度却不是。

但是如果我这样做:

try(BufferedInputStream input = new BufferedInputStream(request.getInputStream()))
{
byte[] buffer = new byte[request.getContentLength()];
input.read(buffer);
System.out.println(new String(buffer, StandardCharsets.UTF_8));
}

它工作得很好。

那么第一种情况我错在哪里?

最佳答案

您使用 InputStreamReader 的方式并不是真正的预期方式。对 read 的调用不能保证读取任何特定数量的字节(这取决于您正在读取的流),这就是为什么此方法的返回值是读取的字节数。您需要继续从流中读取数据并进行缓冲,直到它指示它已到达末尾(它将返回 -1 作为读取的字节数)。可以在此处找到有关如何执行此操作的一些很好的示例:Convert InputStream to byte array in Java

但是由于您希望将其作为字符数据,因此您可能应该使用 request.getReader() 代替。可以在这里找到如何执行此操作的一个很好的示例:Retrieving JSON Object Literal from HttpServletRequest

关于java - 服务器无法读取全部内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28010366/

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