공부/java2014. 9. 23. 18:49


이번 예제에서는 BufferedInputStream 클래스에 대해 알아보겠습니다. BufferedInputStream 클래스는 입력을 버퍼에 추가 하는 기능과 mark() 메소드와 reset() 메소드가 추가 되어있습니다.

BufferedInputStream 클래스는 InputStream 클래스의 모든 메소드를 오버라이드 하는 FilterInputStream 클래스를 확장합니다.

BufferedInputStream 클래스는 JDK 1.0 부터 존재 해왔습니다.

BufferedInputStream 클래스의 생성자 기본 구조

생성자

  • BufferedInputStream(InputStream in)

- 인자값으로 넘어온 입력 스트림을 나중에 사용하기 위해 저장하는 BufferedInputStream 인스턴스를 만듭니다.

  • BufferedInputStream(InputStream in, int size)

- 지정된 크기를 가지는 BufferedInputStream 인스턴스를 만들어 인자로 넘어온 입력 스트림을 나중에 사용하기 위해 저장합니다.

BufferedInputStream 간단 예제

BufferedInputStream 클래스의 기본 사용법을 보여줍니다.

package kr.co.leehana.example.bufferedinputstream;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class BufferedInputStreamSimpleExample {

	public static void main(String[] args) {
		BufferedInputStream input = null;
		try {
			input = new BufferedInputStream(new FileInputStream("test.txt"));
			StringBuilder sb = new StringBuilder();
			while (input.available() > 0) {
				sb.append((char) input.read());
			}

			System.out.println("read this :");
			System.out.println(sb.toString());
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (input != null) {
				try {
					input.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

이 예제에서는 텍스트 파일을 읽어 파일안에 있는 텍스트를 콘솔에 출력 합니다. 파일의 내용을 읽기 위해 입력 스트림으로 FileInputStream 클래스를 이용하여 BufferedInputStream 인스턴스를 생성하였습니다. 그리고 StringBuilder 클래스에 char 형의 데이터 타입으로 추가 해주고 마지막에 스트링타입으로 출력 하였습니다.

마지막에는 잊지말고 BufferedInputStream 인스턴스를 close() 메소드를 호출하여 닫아 주어야 합니다.

BufferedInputStream 추가 예제

이번 예제는 web 서비스로부터 응답된 내용을 출력하는 것을 보여드립니다. 이 예제를 위해 간단한 HttpClient 클래스를 먼저 만들겠습니다.

package kr.co.leehana.example.bufferedinputstream;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class SimpleHttpClient {

	private URL baseurl;

	public SimpleHttpClient(String baseurl) throws MalformedURLException {
		this.baseurl = new URL(baseurl);
	}

	public SimpleHttpClient(URL url) {
		this.baseurl = url;
	}

	public String get(String route) throws IOException {
		StringBuilder sb = new StringBuilder();
		String base = this.baseurl.getHost();
		URL u = new URL("http://" + base + route);
		URLConnection conn = u.openConnection();
		BufferedInputStream in = new BufferedInputStream(conn.getInputStream());

		while (in.available() > 0) {
			sb.append((char) in.read());
		}

		return sb.toString();
	}
}

위 클래스는 간단한 HTTP 클라이언트 입니다. get() 메소드를 호출 하여 웹서비스로 부터 결과를 스트링 타입으로 반환합니다.

아래는 HTTP 클라이언트 클래스를 이용하는 예제 입니다.

package kr.co.leehana.example.bufferedinputstream;

import java.io.IOException;

public class BufferedInputStreamWebExample {

	public static void main(String[] args) {
		try {
			SimpleHttpClient client = new SimpleHttpClient("http://httpbin.org");
			String myIp = client.get("/ip");
			System.out.println(myIp);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

예제에서는 간단한 웹서비스인 http://httpbin.org/ 사이트를 이용하였습니다. HTTP client 의 get() 메소드를 호출하게되면 현재 내 컴퓨터의 IP 주소를 JSON 타입으로 반환을 받게 됩니다. 이렇게 반환된 문자열은 JSON 을 다룰 수 있는 어떤 라이브러리든 이용하여 활용 할 수 있을것입니다.

{
  "origin": "223.62.190.39"
}

BufferedInputStream 추가 정보

BufferedInputStream 클래스는 인스턴스가 만들어질때 내부에 버퍼링 배열을 만듭니다. 스트림의 바이트가 입력되면 스트림으로부터 필요에 따라 한번에 다수의 바이트가 내부 버퍼에 추가 됩니다. 그리고 mark() 메소드는 입력 스트림의 특정 위치를 기억합니다. reset() 메소드는 입력 스트림의 마지막 mark 된 위치로 재설정 됩니다.




예제

출처


'공부 > java' 카테고리의 다른 글

Java ByteArrayInputStream 예제  (0) 2014.09.23
Java List remove object 예제  (0) 2014.09.23
java.lang.System 예제  (0) 2014.09.22
Java BufferedOutputStream 예제  (0) 2014.09.22
Java BufferedWriter 예제  (0) 2014.09.06
Posted by #HanaLee