Вот код, но получил ошибку:
bin = new ByteArrayInputStream(socket.getInputStream());
Можно ли получить byte[]
с помощью ByteArrayInputStream
из сокета?
Вот код, но получил ошибку:
bin = new ByteArrayInputStream(socket.getInputStream());
Можно ли получить byte[]
с помощью ByteArrayInputStream
из сокета?
Нет. Вы используете ByteArrayInputStream
, когда у вас есть массив байтов, и вы хотите читать из массива, как если бы это был файл. Если вы просто хотите прочитать массивы байтов из сокета, сделайте следующее:
InputStream stream = socket.getInputStream();
byte[] data = new byte[100];
int count = stream.read(data);
Переменная count
будет содержать количество фактически прочитанных байтов, а данные, конечно же, будут в массиве data
.
Вы не можете получить экземпляр 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() );