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

Вот код, но получил ошибку:

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

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


person hkguile    schedule 07.05.2012    source источник
comment
но получил ошибку: Какая ошибка? Всегда копируйте/вставляйте исключения и ошибки в вопрос (используя теги кода).   -  person Andrew Thompson    schedule 07.05.2012
comment
Ваш вопрос не имеет смысла. ByteArrayInputStream считывает байты из массива байтов. Если вы хотите читать из сокета, вы не можете читать из массива байтов. Какую проблему вы пытаетесь решить здесь?   -  person user207421    schedule 07.05.2012


Ответы (2)


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

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

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

person Ernest Friedman-Hill    schedule 07.05.2012
comment
Каково значение числа 100 в новом байте [100] Буду ли я перераспределять или недораспределять с помощью 100? - person so-random-dude; 07.05.2020
comment
Это размер массива, следовательно, максимальное количество байтов, которые будут считаны за один раз. Вы можете использовать любой размер, который вам нравится, и вы можете читать в цикле, пока не дойдете до конца файла (в этот момент счетчик станет равным -1). - person Ernest Friedman-Hill; 07.05.2020
comment
Спасибо @Эрнест. Это имеет смысл - person so-random-dude; 07.05.2020

Вы не можете получить экземпляр 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  

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

ByteArrayInputStream bais = new ByteArrayInputStream( baos.toByteArray() );  
person Ravinder Reddy    schedule 07.05.2012