繁体   English   中英

DataOutputStream.writeBytes添加零字节

[英]DataOutputStream.writeBytes adds zero-bytes

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

字符串已正确接收,但三个零值字节已添加到末尾。 为什么会这样,我如何阻止它发生呢? (我当然可以修剪接收到的字符串,或者以其他方式阻止此问题的发生,但我宁愿完全阻止该问题)

我只是把它扔在那里。 您正在使用在Java 5、6和7中已弃用的readLine()方法。API文档非常清楚地指出,此方法“未正确将字节转换为字符”。 我将其读取为字节或使用缓冲读取器。

http://docs.oracle.com/javase/1.5.0/docs/api/java/io/DataInputStream.html#readLine%28%29

writeBytes()不会添加额外的字节。

您编写的代码无效,因为您没有编写换行符。 因此,它不起作用,并在readLine()中永远阻塞。

在尝试调试它时,您似乎已经以其他方式读取了字节,可能是使用read();来完成的。 并忽略了read返回的返回值,并得出结论:read()填充了您提供的缓冲区,如果没有,则将三个字节保留为其初始状态,即零。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM