Java DataInputStream转换为字节数组吗?

问题描述 投票:0回答:1

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

java arrays stream byte tostring
1个回答
0
投票

简短回答:

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是= new ByteArrayInputStream(new byte [] {0,1,2}); //并非真正未知

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

usefull资源:您可以找到其他替代方法来进行此操作here

© www.soinside.com 2019 - 2024. All rights reserved.