首页 文章

DataOutputStream.writeBytes添加零字节

提问于
浏览
1

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

    我只是想把它扔出去 . 您正在使用已在Java 5,6和7中弃用的readLine()方法.API文档非常清楚地表明此方法“无法正确地将字节转换为字符” . 我会把它读作字节或使用缓冲读卡器 .

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

  • 0

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

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

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

相关问题