0

我正在将 png 图像转换为字节数组,并使用套接字将其发送到 android 上的客户端在 android 上,我读取了如下所示的字节:

ByteArrayOutputStream dataBuffer = new ByteArrayOutputStream();
InputStreamReader in = new InputStreamReader(s.getInputStream());
int readLength;
byte buffer[] = new byte[1024];
while ((readLength = in.read(buffer)) != -1) {
 dataBuffer.write(buffer, 0, readLength);
 }
byte bitmapdata[] = dataBuffer.toByteArray();

但我在这里有一个非常愚蠢的问题。Java 给我一个错误,它不能接受 in.read(buffer) 的字节数组由于某种原因,它似乎只接受 char[],说“无法解析方法 read(byte[])”。

任何人都知道为什么会发生这种情况或任何其他方式我可以做到这一点?

4

2 回答 2

1

InputStreamReader 没有 read.(byte[]) 方法。这是解决您的问题的示例:http: //tutorials.jenkov.com/java-io/inputstreamreader.html

于 2013-03-16T00:59:47.987 回答
0

由于 Java 支持 Unicode,单个 Javachar至少有 2 bytes 长,有时甚至更长(血淋淋的细节在这里)。这意味着我们不能像在 C 等其他语言中那样互换处理这些数据类型。

由于您要处理原始字节,因此请远离InputStreamReader并直接使用InputStream您提供的Socket.

像这样的东西应该工作:

ByteArrayOutputStream dataBuffer = new ByteArrayOutputStream();
InputStream in = s.getInputStream();
int readLength;
byte buffer[] = new byte[1024];
while ((readLength = in.read(buffer, 0, buffer.length)) != -1) {
  dataBuffer.write(buffer, 0, readLength);
}
byte bitmapdata[] = dataBuffer.toByteArray();

如果您希望从您的 中读取文本而不是图像数据SocketInputStreamReader那将是可行的方法,因为它隐藏了与可变字节字符编码格式相关的许多令人头疼的问题(更多信息在这里

于 2013-03-16T01:40:51.253 回答