2012-05-07 4 views
9

Вот код, но получил сообщение об ошибке:Получить байт [] с помощью ByteArrayInputStream из сокета

bin = new ByteArrayInputStream(socket.getInputStream()); 

Можно ли получить byte[] с помощью ByteArrayInputStream из сокета?

+1

* «но получил сообщение об ошибке:» * Got какая ошибка? Всегда копируйте/вставляйте исключение и вывод ошибки в вопрос (используя теги кода). –

+0

Ваш вопрос не имеет смысла. ByteArrayInputStream считывает байты из массива байтов. Если вы хотите читать из сокета, вы не можете читать из массива байтов. Какую проблему вы пытаетесь решить здесь? – EJP

ответ

21

Нет. Вы используете ByteArrayInputStream, когда у вас есть массив байтов, и вы хотите читать из массива, как если бы это был файл. Если вы просто хотите читать массивы байтов из сокета, выполните следующие действия:

InputStream stream = socket.getInputStream(); 
byte[] data = new byte[100]; 
int count = stream.read(data); 

count переменная будет содержать количество считанных байт, и данные, конечно, будет в массиве data.

7

Вы не можете получить экземпляр ByteArrayInputStream, прочитав его непосредственно из сокета.
Вам необходимо сначала прочитать и найти содержимое байта.
Затем используйте его для создания экземпляра ByteArrayInputStream.

InputStream inputStream = socket.getInputStream(); 

// read from the stream 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
byte[] content = new byte[ 2048 ]; 
int bytesRead = -1; 
while((bytesRead = inputStream.read(content)) != -1) { 
    baos.write(content, 0, bytesRead); 
} // while 

Теперь, когда у вас есть BAOS в руке, я не думаю, что вы все еще нужен bais экземпляра.
Но, чтобы сделать его полным,
вы можете создать массив байт входного потока, как показано ниже

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 
Смежные вопросы