2012-05-07 30 views
9

Oto kod, ale mam błąd:Otrzymuj byte [] za pomocą ByteArrayInputStream z gniazdka

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

Czy to możliwe, aby otrzymać byte[] użyciu ByteArrayInputStream z gniazda?

+1

* "ale mam błąd:" * Got jaki błąd? Zawsze kopiuj/wklej dane wyjściowe wyjątków i błędów do pytania (używając znaczników kodu). –

+0

Twoje pytanie nie ma sensu. ByteArrayInputStream odczytuje bajty z tablicy bajtów. Jeśli chcesz czytać z gniazda, nie możesz odczytać z tablicy bajtów. Jaki problem próbujesz rozwiązać tutaj? – EJP

Odpowiedz

21

Nie. Używasz ByteArrayInputStream, gdy masz tablicę bajtów i chcesz odczytać z tablicy tak, jakby był plikiem. Jeśli chcesz tylko do odczytu tablic bajtów z gniazda, to zrobić:

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

Zmienna count będzie zawierać liczbę bajtów faktycznie czytać, a dane będzie oczywiście w tablicy data.

7

Nie można uzyskać wystąpienia ByteArrayInputStream czytając bezpośrednio z gniazda.
Musisz przeczytać najpierw i znaleźć zawartość bajtową.
Następnie użyj go, aby utworzyć instancję 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 

Teraz, jak masz baos w ręku, nie sądzę, trzeba jeszcze instancji bais.
Ale, aby to kompletny,
można wygenerować tablicę bajtów strumienia wejściowego, jak poniżej

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 
Powiązane problemy