Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java,为什么DataInputStream在使用空格时拆分字符串_Java_Sockets_Datainputstream - Fatal编程技术网

java,为什么DataInputStream在使用空格时拆分字符串

java,为什么DataInputStream在使用空格时拆分字符串,java,sockets,datainputstream,Java,Sockets,Datainputstream,所以我试着学习Socket和DataInputStream 虽然我尝试了很多尝试,但我意识到,DataInputStreamread string as divided,意思如下: 客户端: dos = new DataOutputStream(socket.getOutputStream()); String msg = "okay test some String" dos.writeUTF(msg); dis = new DataInputStream(socket.getInput

所以我试着学习
Socket
DataInputStream

虽然我尝试了很多尝试,但我意识到,
DataInputStream
read string as divided,意思如下:

客户端:

dos = new DataOutputStream(socket.getOutputStream());

String msg = "okay test some String"

dos.writeUTF(msg);
dis = new DataInputStream(socket.getInputStream());

while(true){

    msg = dis.readUTF();

    Syso(msg);

}
okay

test

some

String
服务器端:

dos = new DataOutputStream(socket.getOutputStream());

String msg = "okay test some String"

dos.writeUTF(msg);
dis = new DataInputStream(socket.getInputStream());

while(true){

    msg = dis.readUTF();

    Syso(msg);

}
okay

test

some

String
结果:

dos = new DataOutputStream(socket.getOutputStream());

String msg = "okay test some String"

dos.writeUTF(msg);
dis = new DataInputStream(socket.getInputStream());

while(true){

    msg = dis.readUTF();

    Syso(msg);

}
okay

test

some

String

我想一行完整地阅读
msg
。我该怎么办?

使用
BufferedReader

dis = new BufferedReader(new InputStreamReader(socket.getInputs()))
while(true){
   msg = dis.readLine() 
   System.out.println(msg);
}
或者,您可以将
System.out.println
替换为
System.out.print
,它不会在末尾打印新行字符

dis = new DataInputStream(socket.getInputStream());
while(true){
   msg = dis.readUTF();
   System.out.print(msg+" ");
}

我对您的程序进行了一点重构测试(它不能像这样编译),并且运行良好。如果继续出现这些错误,请记住DataInputStream和DataOutputStream正在使用自定义UTF实现,您只能将它们用于java应用程序之间的通信。我建议您也像@Arun所说的那样使用读写器接口,但是
显式地
指定它们使用的字符集。
Syso
做什么呢?
DataInputStream
DataOutputStream
的行为都不像这里所说的那样。显然是
Syso
造成的。@Arun
writeUTF
为字符串的其余部分包含一个字节数,而
readUTF
读取该字节数并继续读取该字节数。它不像你想象的那样工作。是的,我删除了评论。建议将
dis=newdatainputstream(socket.getInputStream())
更改为
dis=newbufferedreader(newinputstreamreader(socket.getInputStream())
msg=dis.readUTF()
更改为
msg=dis.readLine()