DataOutputStream.writeBytes添加零字节

时间:2014-03-17 14:37:01

标签: java tcp

我有一个小型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();

正确接收字符串,但最后添加了三个零值字节。为什么这样,我怎么能阻止它发生? (当然,我可以修剪收到的字符串或以某种方式阻止这个问题,但我宁愿完全防止这个问题)

2 个答案:

答案 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()填充了你提供的缓冲区,当它没有时,将三个字节保留在它们的初始状态,即零。