我有一个小型TCP服务器程序和相应的客户端,它们通过ServerSocket和Socket类以及DataInputStream / DataOutputStream进行通信。我将字符串发送到服务器时遇到问题。
connection = new Socket("localhost", 2233);
outStream = new DataOutputStream(connection.getOutputStream());
outStream.writeBytes(fileName);
fileName在这个时间点是一个硬编码的字符串,其值为“listener.jardesc”。服务器使用以下代码读取字符串:
inStream = new DataInputStream(connection.getInputStream());
String fileName = inStream.readLine();
正确接收字符串,但最后添加了三个零值字节。为什么这样,我怎么能阻止它发生? (当然,我可以修剪收到的字符串或以某种方式阻止这个问题,但我宁愿完全防止这个问题)
答案 0 :(得分:0)
我只是想把它扔出去。您正在使用已在Java 5,6和A中使用的readLine()方法。 7. API文档非常清楚地说明了这种方法“没有正确地将字节转换为字符”。我会把它读作字节或使用缓冲读卡器。
http://docs.oracle.com/javase/1.5.0/docs/api/java/io/DataInputStream.html#readLine%28%29
答案 1 :(得分:0)
writeBytes()不会添加额外的字节。
您编写的代码无效,因为您没有编写换行符。因此它不起作用,并在readLine()中永久阻塞。
在尝试调试时,你似乎已经用其他方式读取了字节,可能是read();并且忽略了read返回的返回值,并得出结论read()填充了你提供的缓冲区,当它没有时,将三个字节保留在它们的初始状态,即零。