Java DataInputStream 转换为字节数组?

Java DataInputStream convert to byte array?

我有一个 DataInputStream 和一个方法,它应该 return 一个字符串。我知道,我的数据流收到一个包含字符串的数据包。但是我编写的代码无法编译。我使用 TCP 套接字和流来发送/接收数据。重要的是,我必须使用 Java 1.8 编译器!这就是为什么我不能使用 in.readAllBytes()

的原因
public String readString(DataInputStream in) throws IOException {
String str;
byte[] bytes = in. //dont know what to write here
str = bytes.toString();
return str;
}

因此,如您所见,我首先创建了一个新的 ByteArray 变量。此后,byteArray 应转换为 String。

简答:

byte[] bytes = new byte[in.available()];

    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    int nRead;
    byte[] data = new byte[1024];
    while ((nRead = in.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, nRead);
    }
    buffer.flush();
    byte[] bytes= buffer.toByteArray();

长答案:

对于固定大小的流

InputStream initialStream = new ByteArrayInputStream(new byte[] { 0, 1, 2 });
byte[] targetArray = new byte[initialStream.available()];

如果您不知道基础数据的确切大小

InputStream is = new ByteArrayInputStream(new byte[] { 0, 1, 2 }); // not really unknown
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[1024];
while ((nRead = is.read(data, 0, data.length)) != -1) {
    buffer.write(data, 0, nRead);
}

buffer.flush();
byte[] byteArray = buffer.toByteArray();

从 java9 开始你可以使用这个:

InputStream is = new ByteArrayInputStream(new byte[] { 0, 1, 2 });
byte[] data = is.readAllBytes();

有用的资源:您可以找到更多其他替代方法来执行此操作 here