首页 > 解决方案 > Java DataInputStream 转换为字节数组?

问题描述

我有一个 DataInputStream,我有一个方法,它应该返回一个字符串。我知道,我的数据流收到一个数据包,其中包含一个字符串。但是我编写的代码无法编译。我正在使用 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 应转换为字符串。

标签: javaarraysstreambytetostring

解决方案


简短的回答:

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();

从 java 9 开始,您可以使用它:

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

有用的资源:您可以在此处找到更多其他替代方法


推荐阅读