我有一个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。
简短回答:
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