なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

Inputstreamをきれいにバイト配列にする

package jp.gr.java_conf.nagata;
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; /** * @author learning * 2012/04/24 新規作成 * * ソケット通信を行うテストプログラム */ public class SocketTest { public static void main(String args){ // 例のごとく2ちゃんにつなぐ(嫌儲) String host = "engawa.2ch.net"; String path = "/poverty/subject.txt"; String referer = "http://engawa.2ch.net/poverty/"; int port = 80; int c = 0; Socket socket = null; InputStream in = null; OutputStream out = null; ByteArrayOutputStream bout = null; try { // ソケット通信用クラスのインスタンスを用意し、ストリームを得る socket = new Socket(host, port); in = socket.getInputStream(); out = socket.getOutputStream(); bout = new ByteArrayOutputStream(); // 電文用Stringを用意する String telegram = "GET " + path + " HTTP/1.1\r\n" + "Accept-Encoding: text/plain \r\n" + "Host: " + host + ":" + port + "\r\n" + "Accept: */*\r\n" + "Referer: " + referer + "\r\n" + "Accept-Language: ja \r\n" + "User-Agent: Mozilla/5.0 \r\n" + "Connection: close \r\n\r\n"; // バイト型にする out.write(telegram.getBytes()); out.flush(); // 終端が来るまでwhileで回す while ((c = in.read()) != -1) { bout.write(c); } // きれいにバイト配列に変換できる。やったぜベイビー byte barray = bout.toByteArray(); String show = new String(barray, "Shift_JIS"); System.out.print(show); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // リソースを閉じる、リソースごとにクローズ用クラスを作って閉じたほうがいい try { socket.close(); in.close(); out.close(); bout.close(); } catch (IOException e) { e.printStackTrace(); } } } }