lec01-Java I/O #1 InputStream 과 OutputStream

2015. 1. 14. 13:49 - 에릭투스

자바네트웍 강의인데 왜 IO가 있나 당황하셨쎄요?

얼핏 보면 다른 분야 같지만, 실제로 네트웍이 연결된 후 데이터 전송 및 수신은 결국 자바 IO로 이루어 집니다!

그렇기 때문에 자바 I/O에 대한 기초를 잘 다져놔야 네트웍 수업 이후 과정이 쉽게 느껴집니다~


자바 I/O에서 다루는 객체 종류가 있는데

 1) InputStream / OutputStream

 2) Reader / Writer

 3) FilterStream 이 있습니다~


첫번째 강의는 InputStream과 OuputStream에 대해서 공부해볼겁니다~ InputStream/OutputStream은 데이터를 byte기반으로 처리합니다.


/**
 *  예제#1) InputStream 기초
* 	표준입력을 통해 입력받고, 표준출력을 통해 출력.
*/
	public static void InputStreamExample(){
		InputStream input = System.in;
		int read = 0;
		byte[] buf = new byte[512];
		System.out.println("메시지를 입력해주세요. *종료시 exit 입력");
		String line = System.lineSeparator();	//\r\n
		
		try {
			while((read = input.read(buf)) != -1){
				String text = new String(buf,0,read-line.length());
				System.out.println("입력한 Data : "+text+"("+text.length()+")");
				
				if("exit".equals(text)){
					break;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} 
	}

위의 예제코드를 천천히 살펴보면 
표준입력을 의미하는 System.in을 통해 사용자에게 입력값을 받고 원시형 스트림인 InputStream을 사용하여 처리하는 간단한 예제입니다.

InputStream은 byte데이터를 사용하므로 한꺼번에 입력받는 버퍼용 byte 배열을 사용하며, read함수를 통해 buffer로 입력 받습니다~

read함수는 들어오는 스트림 읽는 함수로, 정상적으로 읽은 경우, 읽은 문자열 크기를 리턴합니다. 만약 더이상 읽을 문자열이 없을 경우 -1을 리턴합니당

저장된 버퍼와 읽어온 문자열 크기 값을 이용해 String 객체를 생성하여 표준출력을 통해 확인합니다.
*System.in을 통해 입력받을 경우 개행문자열( \r \n )이 입력받으므로 잘라냅니다

두번째 예제는 OutputStream은 훨씬 간단합니다.
 OutputStream도 마찬가지로 byte타입을 통해 1바이트씩 처리하며 마찬가지로 버퍼역할을 하는 byte[]을 통해 출력합니당
/**
 *  예제#2) OutputStream 기초
 * 	표준출력(System.out)에 대한 원시 클래스 사용.
 * @throws IOException
 */
	public static void OutputStreamExample() throws IOException{
		String text = "Hello!! Alzio Network Lecture!!";
		byte[] textByte = text.getBytes();
		
		OutputStream out = System.out;
		out.write(textByte, 0, textByte.length);
		out.flush();
		out.close();
	}


다른 카테고리의 글 목록

자바 기본 공부/네트워크 개발 카테고리의 포스트를 톺아봅니다