gpt4 book ai didi

java - 在java中使用BufferedInputStream读取大输入流时丢失和意外的字符

转载 作者:行者123 更新时间:2023-11-30 05:09:13 24 4
gpt4 key购买 nike

我必须读取来自 URL 的大型输入流。我将 InputStream 加载到 BufferedInputStream 中,并将其读取到 byte[ ] 中,然后将该字节 [] 附加到 StringBuilder 中,将其转换为字符串。将所有数据附加到 StringBuilder 后,生成的 String 包含一些丢失和意外的字符。我在这里没有使用任何编码(例如 UTF-8),因为响应的格式与我预期的类似。

您能提出解决这个问题的建议吗?

代码:

    BufferedInputStream brIn    = new BufferedInputStream(connection.getInputStream());
StringBuilder response = new StringBuilder(1000);

byte[] byteBfr = new byte[8192];
int n=0;

while((n=brIn.read(byteBfr,0,byteBfr.length)) != -1){
response.append(new String(byteBfr).toCharArray(),0,n);
}

return response.toString();

输出:这是结果响应的一部分。完整的内容大约包含 554595 行。

预期结果:

  <Hotel>
<CiID>31</CiID>
<HoID>58617</HoID>
<Name>HARRY΄S</Name>
<Address>PROTARAS</Address>
<Phone>00357 23 834100</Phone>
<Fax>0035723831860</Fax>
<Stars>3</Stars>
</Hotel>

实际结果:

  <Hotel>
<CiID>31</CiID>
<HoID>58617</HoID>
<Name>HARRY΄S</Name>
<Address>PROTARAS</AdAdress>
< <Phone>00357 23 834100</Phone>
<Fa9x>00390<P654224546</Fax>
<Stars>3</Stars>
</Hotel>

在上面的内容中,您可以在地址、传真和电话中看到意外的字符。

最佳答案

由于您要立即读取整个字符串(而不是在字符串到达​​时对其进行处理),因此请考虑使用 BufferedReader

import java.io.*;
import java.net.*;

public class UrlReading {
public static void main(String[] args) throws Exception {
URL url = new URL("http://google.com");
BufferedReader reader = new BufferedReader(
new InputStreamReader(url.openConnection().getInputStream(), "UTF-8"));
String inputLine;
while( (inputLine = reader.readLine()) != null) {
System.out.println(reader.readLine());
}
}
}

或者,如果您正在阅读 xml,请考虑使用可让您解析 xml 的解决方案,例如:

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("http://google.com");

关于java - 在java中使用BufferedInputStream读取大输入流时丢失和意外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4039680/

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