【问题标题】:Unexpected behavior with write and readline (Java)write 和 readline (Java) 的意外行为
【发布时间】:2015-09-22 12:53:05
【问题描述】:

我正在编写一个客户端服务器程序,我必须在其中发送byte[]。所以,我正在使用以下代码:

byte[] b = {}; //byte array of size 10
w2.write(new String(b, "utf-8") + "\n");     //exceptions etc. are handled

在接收方:

String s = r.readLine();
byte[] g = s.getBytes("utf-8");
//Now, when I print the string here, the o/p seems 
//to be the same as on the sending side but g.length is now 14 here.

我正在打印通过new String(byte array[], "utf-8")将其转换为字符串的字节数组

它也会打印一些不可读的字符,但它们匹配(所以我认为没有问题)

这种行为的原因是什么?

这就是 reader 和 writer 的声明方式:

c = (SSLSocket) f.createSocket("127.0.0.1", 24910);
w = new BufferedWriter(new OutputStreamWriter(c.getOutputStream()));
r = new BufferedReader(new InputStreamReader(c.getInputStream()));

【问题讨论】:

  • 从什么字节开始? w2 是什么?假设它是某种描述的作者,它在写什么以及它使用什么编码? r 是什么?这篇文章中缺少 很多 信息。
  • w2 是套接字的 bufferedWriter。
  • 你是如何创建它的?将所有相关信息放入问题中。从根本上说,如果您尝试将二进制数据从一个地方传输到另一个地方,则根本不应该使用 Reader 和 Writer 类。
  • 同样,r 是接收端的 bufferedReader。我没有解释变量,因为它似乎是 obvs。对不起。
  • 我放弃了,我害怕。我已经多次解释过 reader 和 writers 是为 text 数据设计的,因此它们不适合用于二进制数据(字节数组)。我不知道我可以用多少种不同的方式来解释这一点。

标签: java bufferedreader readline bufferedwriter


【解决方案1】:

尝试使用InputStreamOutputStream

可能是this question 帮助。

【讨论】:

  • 这不是答案。
  • 但这正是 vish4071 想要做的。他基本上想通过套接字发送字节。
  • 您应该对问题和解决方案提供一些解释。
  • 我不知道,但是在谷歌搜索时,该链接没有出现(我的错误在那里)。我很乐意提供更多解释,但这个链接确实有帮助。
猜你喜欢
  • 1970-01-01
  • 2016-08-19
  • 2011-10-06
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多