4

クライアントソケットからサーバーソケットにリクエストを送信し、エスケープ文字( "\ n")を使用してリクエストを区別したい(バイト配列として送信)。例として、新しい行ごとに1つのリクエストが必要です。

"Request1 "
"Request2"
"Request3"

これを行うには、このようなリクエストを比較するために、「\n」をバイト単位で変換する必要があります

    byte[] request= new byte[1024];
    int nextByte;
        while((nextByte=in.read(request))!=DELIMITER)
        {

        String chaine = new String( request,0,nextByte);
        System.out.println("Request send from server: " + chaine);
       }

問題は、「\ n」をバイト単位で変換しようとすると、数値形式の例外が発生することです。

private static final byte DELIMITER = Byte.valueOf("\n");

どうもありがとうございます

4

4 に答える 4

7

これを試して:

private static final byte DELIMITER = (byte) '\n';

二重引用符は文字列リテラル用、一重引用符は文字用であり、Byte#valueOfはあなたが思っている以外のことをします。

文字列をバイトに変換したい場合は、次のようにします。

byte[] theBytes = "\n".getBytes("UTF-8");
于 2012-09-12T12:06:30.277 に答える
2

あなたの質問に対する答えはたくさんありますが、次の質問はなぜ私のループが機能しないのかということです。たとえば、正確に10バイトの長さを読み取ると停止し、一度に2つのメッセージを送信すると、1回の読み取りで読み取られます。

あなたが本当に欲しいのは次のようなものです

BufferedReader br = new BufferedReader(new InputStreamReader(in));
for(String line; (line = br.readline()) != null; ) {
    System.out.println("Line read: " + line);
}
于 2012-09-12T12:31:03.730 に答える
1

これを試してみてください

private static final byte DELIMITER = '\n';

'\ n'は、unsignedshortcharに対応するタイプです。ただし、Javaでは常に署名されていることに注意してください。short

于 2012-09-12T12:07:00.483 に答える
1

これはどう:

private static final byte DELIMITER = '\n';

改行を一重引用符で囲むと、char値が作成されます。この場合、情報を失うことなく1バイトに割り当てることができます。

于 2012-09-12T12:07:20.500 に答える