android和java上的二进制数据套接字

时间:2011-08-14 13:39:54

标签: java android binary-data

我正在使用此代码从Facebook服务器获取我的图像。

String imageURL = "http://graph.facebook.com/"+id+"/picture?type=large";                               
InputStream inputStream = new URL(imageURL).openConnection().getInputStream();
DataInputStream dataStream = new DataInputStream(inputStream);
byte[] dataBuffer = new byte[4096];
ByteArrayOutputStream dataHolder = new ByteArrayOutputStream();
int n;

while ( (n=dataStream.read(dataBuffer))!=-1 ){
  dataHolder.write(dataBuffer, 0, n);
}

并使用相同的方式从我的服务器获取我的图像:

FileInputStream inputStream = new FileInputSTream("/image.jpg");
DataOutputStream dataStream = new DataOutputStream(socket.getOutpustStream());
byte[] dataBuffer = new byte[4096];
int n;

while ( (n=inpuStream.read(dataBuffer))!=-1 ){
  dataStream.write(dataBuffer, 0, n);
}//get -1 perfectly

并在Android应用程序上获取它们:

DataInputStream dataStream = new DataInputStream(socket.getInputStream());
byte[] dataBuffer = new byte[4096];
ByteArrayOutputStream dataHolder = new ByteArrayOutputStream();
int n;

while ( (n=dataStream.read(dataBuffer))!=-1 ){
  dataHolder.write(dataBuffer, 0, n);
}//-1 ??????????????

但是Android应用程序无法获得正确的文件,它不能在循环时出去,完全不能得到-1但是昨天我意外地从我做的一些变化得到-1,真的不明白为什么我不能得到 - 1在我的Android应用程序中然而我可以从服务器获取它循环

2 个答案:

答案 0 :(得分:1)

您可以直接将输入流转换为位图而不是读取字节。

Bitmap myBitmap = BitmapFactory.decodeStream(inputStream);

答案 1 :(得分:0)

以下是一些猜测:你是否关闭了服务器端的流?

在写完循环后放一个dataStream.close();