2017-12-13 26 views
0

私はクライアント/サーバーアプリケーションをビルドしており、2つはソケットとストリームを介して通信しています。 私のサーバーは、これらのストリームを作成:Javaのソケットとストリーム

this.out = new DataOutputStream(sock.getOutputStream()); 
this.in = new DataInputStream(sock.getInputStream()); 
this.bufread = new BufferedReader(newInputStreamReader(sock.getInputStream())); 

をし、そのような入力ストリームからの読み込み:

DataOutputStream out = new DataOutputStream(MyClient.getOutputStream()); 
out.writeByte(17); 
out.writeBytes("value\n"); 

私が送ります:

type = this.in.readByte(); 
String name = this.bufread.readLine(); 

最後に、クライアントは、このようなOutputStreamに書き込み私のクライアントからのバイト数とサーバーがバイトを読み取っています。文字列、整数、その​​他のものをクライアントから送信すると、サーバからバイトとして読み込まれますか?使用される特定の機能によって、データの種類が確実に読み取られますか?

答えて

2

2つの異なるオブジェクト(DataInputStreamとInputStreamReader)に同じInputStreamをラップすることはできません。彼らはお互いを知りませんし、お互いの操作を妨害します。

ソケットのInputStreamをの1つをオブジェクトにラップします。生のバイトを読み込む必要があるので、DataInputStreamが最も理にかなっています。

あなたが見たことがあるとおり、readLine method of DataInputStreamは廃止されているため使用できません。 は、その非推奨を無視して使用しないでください。それは理由のために非難されます。つまり、文字を正しく処理しないからです。

代わりにreadUTFメソッドを使用する必要がありますが、サーバがDataOutputStream.writeUTFを使用して文字データを送信していることを確認する必要があります。