【发布时间】:2014-07-04 00:11:33
【问题描述】:
我正在通过Socket 发送Bitmap(从文件中解码),我担心我无法通过一个电话发送write() 所有byte[]。
Bitmap bitmap = BitmapFactory.decodeFile(path);
int cBytes = bitmap.getByteCount();
ByteBuffer cBuffer = ByteBuffer.allocate(cBytes);
bitmap.copyPixelsToBuffer(cBuffer);
bitmap.recycle();
byte[] bitmapArray = cBuffer.array();
这就是我获得byte[] 的方式。那么通过Socket 发送这个数组的方法是什么,我应该把它分成块吗?比如实现一个队列什么的;或者有什么课程可以帮助我进行这个发送吗?
【问题讨论】:
-
我在 Google 上找到了这个 stackoverflow.com/questions/2878867/… 听起来你可以使用 OutputStream 和 InputStream 来做到这一点?
-
谢谢,我实际上是在问是否应该将其分成块并排队,因为位图可能有 1200 万字节(我相信即 12 兆像素的图像),我不认为你可以
Socket#write(my12MillionBytesArray) -
问题不是
Socket#write(my12MillionBytesArray)...问题是:如何不使应用程序在内存中使用my12MillionBytesArray崩溃(甚至在尝试通过TCP 发送这些字节之前) -
如果是发送文件则不要使用Bitmap和BitmapFactory。也不需要将整个文件加载到内存中。只需打开文件的 FileInputStream 即可。在 socket.getOutputStream 上打开一个 OutputStream。然后创建一个循环,在其中读取/写入 16385 字节的块。
-
这正是我正在寻找的答案,介意用一个例子写一个答案吗?