【发布时间】: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