尝试读取字节时输入流错误

时间:2013-03-16 00:54:46

标签: java android sockets

我正在将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 [],说“无法解析方法读取(byte [])”。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

由于Java支持Unicode,因此单个Java char的长度至少为byte长,有时甚至更长(gory details here)。这意味着我们不能像其他语言(如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();

如果您希望从Socket读取文本而不是图像数据,那么InputStreamReader将成为可行的方法,因为它隐藏了许多与可变字节字符编码格式相关的麻烦(more info here