сокет двоичных данных на Android и Java - PullRequest
0 голосов
/ 14 августа 2011

Я использую этот код для получения своего изображения с сервера 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 ]

1 голос
/ 14 августа 2011

Вы можете напрямую преобразовать входной поток в битовый массив вместо чтения байтов.

Bitmap myBitmap = BitmapFactory.decodeStream(inputStream);

0 голосов
/ 14 августа 2011

Вот лишь некоторые предположения: вы закрыли поток на стороне сервера?

Поставьте dataStream.close(); после цикла записи.

...