web-dev-qa-db-ja.com

ソケットからByteArrayInputStreamを使用してbyte []を受信します

これがコードですが、エラーが発生しました:

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

ソケットからByteArrayInputStreamを使用してbyte[]を受信することは可能ですか?

10
hkguile

いいえ。バイトの配列があり、ファイルであるかのように配列から読み取りたい場合は、ByteArrayInputStreamを使用します。ソケットからバイトの配列を読み取りたいだけの場合は、次のようにします。

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

変数countには実際に読み取られたバイト数が含まれ、データはもちろん配列dataにあります。

22

ソケットから直接読み取ることによって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() );  
10
Ravinder Reddy