1

需要通过套接字发送一个未知大小的字节数组。当我尝试将字节数组写入 printwriter 时

        writeServer = new PrintWriter(socketconnection.getOutputStream());
        writeServer.flush();
        writeServer.println("Hello World");
        writeServer.println(byteArray.toString());

它是在服务器上接收的,但只有 5-6 个字符的字符串,总是从 [B@..... 但是当我通过输出流发送它时

        writeServer.println("Hello World");
        socketconnection.getOutputStream().write(byteArray);

它在服务器上正确接收。但问题在于第二个选项“Hello World”字符串没有通过服务器。我希望将这两件事都交付给服务器。

我该怎么做?

4

2 回答 2

2

您正在尝试混合二进制和文本,这必然会令人困惑。我建议您使用其中一种。

// as text
PrintWriter pw = new PrintWriter(socketconnection.getOutputStream());
pw.println("Hello World");
pw.println(new String(byteArray, charSet);
pw.flush();

或者

// as binary
BufferedOutputStream out = socketconnection.getOutputStream();
out.write("Hello World\n".getBytes(charSet));
out.write(byteArray);
out.write(`\n`);
out.flush();
于 2012-10-04T11:40:44.990 回答
2

byteArray.toString()将返回您人类可读的byteArray. 即使对于数组,它也永远不是人类可读的。

如果你想转移byteArrayString那么你应该使用

String str = new String(bytes, Charset.defaultCharset());//Specify different charset value if required.
于 2012-10-04T11:57:58.010 回答