4

我将请求从客户端套接字发送到服务器套接字,并且我想使用转义字符(“\n”)区分请求(作为字节数组发送)。我希望每个新行示例有一个请求:

"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 个字节长,它将停止,如果您一次发送两条消息,它们将在一次读取中被读取。

你真正想要的是

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' 的类型char对应于unsigned short。但请记住,short在 Java 中始终是签名的。

于 2012-09-12T12:07:00.483 回答
1

这个怎么样:

private static final byte DELIMITER = '\n';

将换行符括在单引号中会生成一个 char 值,在这种情况下,可以将其分配给一个字节而不会丢失任何信息。

于 2012-09-12T12:07:20.500 回答