java - 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 应转换为字符串。
解决方案
简短的回答:
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();
有用的资源:您可以在此处找到更多其他替代方法
推荐阅读
- twig - 如何检查 li 是否有 class Active?
- python-3.x - 来自 python:3.x-alpine3.x 的 Alpine Docker 映像使用的 Python 包版本与所述不同
- javascript - 使用 findOne() 后如何从 mongoose/mongodb 文档中获取值
- cassandra - 在微秒内插入值时遇到问题
- callback - 从外部插件回调后离子内容不更新
- angular - 是否可以从 cellEditorParams 中检索值来为 ag-grid 中的列单元格着色?
- go - 如何使用 go 程序更新 Rancher 容器的镜像
- oracle - PLSQL 触发器引发应用程序错误不起作用
- php - 在codeigniter中上传压缩图像大小
- database - 将数据从 VBA 中的 SQL 加载到组合框