2011-12-30 8 views
1

これは私がこれまでのところ、私のコードで読むイメージファイル

Socket clientSocket = new Socket(HOST, PORT); 

ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 

InputStream is = socket.getInputStream(); 
byte[] byteChunk = new byte[1024]; 

int c = is.read(byteChunk); 

while (c != -1){ 
    buffer.write(byteChunk, 0, c); 
    c = is.read(byteChunk); 
} 

BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(buffer.toByteArray())); 

私の問題は、ImageIO.read()戻っnullでてきたものです。例えばÀã$sU,e6‡Í~áŸP;Öã…などの異なる文字を空行に加え、多くの行が続く

私は何を得るByteArrayOutputStreamオブジェクトのコンテンツを印刷するヘッダ部

HTTP/1.1 200 OK 
Date: Fri, 30 Dec 2011 11:34:19 GMT 
Server: Apache/2.2.3 (Debian) ........... 
Last-Modified: Tue, 20 Dec 2011 19:12:23 GMT 
ETag: "502812-490e-4b48ad8d273c0" 
Accept-Ranges: bytes 
Content-Length: 18702 
Connection: close 
Content-Type: image/jpeg 

あります。

もう一度私の問題はImageIO.read()関数がnullを返すことです。

ありがとうございます。

+0

HTTPから照会しているように見えるので、ローソケットの代わりにHTTPクライアント実装を使用するのはなぜですか? – fge

+0

私は練習にソケットを使う必要があります。 –

+0

イメージ・バイトを印刷し、それらを前書き込みおよび後読み出しと比較します。一致すれば送信に問題はない。私たちは他の面を見る。 –

答えて

2

ホストからイメージを取得するのに単純なhttp URLを使用したくないのはなぜですか? 私は意味:

URL imageURL = new URL("http://host:port/address"); 
BufferedImage bufferedImage = ImageIO.read(imageURL); 

あなたはプレーンなソケットを使用する場合は、手動でHTTP応答からのHTTPレスポンスと抽出データを解析する必要があります、スキップ/ヘッダを読んでバイナリデータの読み取りとImageIO.readに渡し(またはストリームを求めます位置を修正し、ストリームをImageIO.readに渡す)。

+0

私はプレーンソケットを使用するように制限されています。私は私の質問で言及HTTPヘッダーの部分を取り除く必要があるという意味ですか? –

+0

@nevayeshiraziもちろん、ImageIO.readメソッドに渡すためにプレーンなイメージバイナリデータを取得する必要があります。 – 4ndrew

+0

それは意味があります。ご回答有難うございます。 –

関連する問題