Android 通过套接字发送位图
我正在通过Android 通过套接字发送位图,android,sockets,bitmap,Android,Sockets,Bitmap,我正在通过Socket发送Bitmap(从文件解码),我担心一次调用就无法write()所有字节[] Bitmap bitmap = BitmapFactory.decodeFile(path); int cBytes = bitmap.getByteCount(); ByteBuffer cBuffer = ByteBuffer.allocate(cBytes); bitmap.copyPixelsToBuffer(cBuffer); bitmap.recycle(); byte[] bitm
Socket
发送Bitmap
(从文件解码),我担心一次调用就无法write()
所有字节[]
Bitmap bitmap = BitmapFactory.decodeFile(path);
int cBytes = bitmap.getByteCount();
ByteBuffer cBuffer = ByteBuffer.allocate(cBytes);
bitmap.copyPixelsToBuffer(cBuffer);
bitmap.recycle();
byte[] bitmapArray = cBuffer.array();
这就是我获取字节[]的方式。那么通过
Socket
发送这个数组的方法是什么,我应该把它分成块吗?比如实现一个队列之类的;或者有没有什么课程可以帮我完成这个任务 我使用loopj的异步http库,但我是这样做的:
public void add_image_android(final Bitmap image)
{
final ByteArrayInputStream bs;
final Bitmap targetBitmap;
Matrix matrix = new Matrix();
matrix.postRotate(90);
targetBitmap = Bitmap.createBitmap(image, 0, 0,
image.getWidth(), image.getHeight(),
matrix, true);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
targetBitmap.compress(CompressFormat.JPEG, 100, bos);
byte[] bitmapdata = bos.toByteArray();
bs = new ByteArrayInputStream(bitmapdata);
targetBitmap.recycle();
String url = "http://www.somesite.com/api.php?callback=add_image";
RequestParams params = new RequestParams();
params.put("file", bs);
params.put("is_android","Y");
client.post(url, params, new JsonHttpResponseHandler()
{
@Override
public void onSuccess(JSONObject response)
{
try
{
bs.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
((ResponseListener)_mainContext).add_image_android_response(response.toString());
return;
}
@Override
public void onFailure(Throwable e)
{
fireToast("api error:"+e);
Log.d("api error:",e.toString());
}
});
}
您可以在一次写入()中写入它。不需要分块。您的问题是内存,而不是写入。谢谢您的回复,但我使用的是
Socket
而不是HTTP:(哦,明白了。我当时不知道:你的应用程序要求你使用套接字吗?为什么不直接使用HTTP?我的老板要求,如果它依赖于meI Googled,我会完全使用HTTP,并且发现这听起来像你可以使用OutputStream和InputStream来完成?谢谢,我实际上是在问是否应该将它划分为块并排队,s因为位图可能有1200万字节(我相信是1200万像素的图像),我不认为你可以只Socket>写(1200万字节数组)
问题不在于Socket>写(1200万字节数组)
…问题在于:如何在内存中不让1200万字节数组
崩溃应用程序(甚至在尝试通过TCP发送这些字节之前)如果要发送文件,则不要使用位图和BitmapFactory。也不需要在内存中加载整个文件。只需打开文件的FileInputStream。在socket.getOutputStream上打开OutputStream。然后在其中创建一个循环,读取/写入16385字节的块。这正是我要寻找的答案,介意写一个答案吗请举个例子好吗?