【问题标题】:Using libraries to read inputstream into arrays in android使用库将输入流读入android中的数组
【发布时间】:2012-12-05 03:54:23
【问题描述】:

我正在尝试将从输入流(从套接字)接收到的数据(特别是图像)保存到字节数组中。 我检查了两个选项:

一个。使用java.io.ByteArrayOutputStream,然后使用如下代码:

  InputStream in = socket.getInputStream();
  byte[] imageInBytes = in.toByteArray();

问题在于eclipse无法识别方法toByteArray()。如何将InputStream(在本例中为in)复制/更改为ByteArrayOutputStream,以便使用该方法?

b.使用org.apache.commons.io.IOUtils,然后使用以下内容:

    InputStream in = socket.getInputStream();
    byte[] imageInBytes = IOUtils.toByteArray(in);

我在java构建路径中添加了commons-io-2.4.jar,并复制到/libs目录下,但还是没有按照预想的那样做,由于byte[] imageInBytes = IOUtils.toByteArray(in);报错。

顺便说一句,我正在使用姜饼。

对于这两种情况,我都想知道我是否做得对,以及如何解决上述问题。

【问题讨论】:

  • InputStream.read(byte[] buffer) ... developer.android.com/reference/java/io/…
  • 使用InputStream.read(byte[] buffer)的问题是传入流的大小未知,为了设置buffer的大小。
  • 检查循环中流上有多少字节可用 => 创建该大小的字节数组 => 填充数组;一块一块地,你会得到一切。只要弄清楚如何包装它。一旦 InputStream.available() 返回 0,退出循环。

标签: java android arrays sockets save


【解决方案1】:

试试这个:

InputStream inputStream = socket.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);

或者:

InputStream inputStream = socket.getInputStream();
Drawable drawable = Drawable.createFromStream(inputStream, null);
imageView.setImageDrawable(drawable);

【讨论】:

  • 感谢您的回答,但eclipse无法识别Android应用程序的BufferedImage和ImageIO,我该如何解决这个问题(即添加相应的库)?另外,如果我得到您发布的对象 BufferedImage img,如何在 ImageView 对象中显示 img?。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2013-12-18
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多