본문 바로가기
웹개발/Java

Java IO 패키지 정리 2 - 보조스트림

by 인생여희 2021. 3. 17.

Java IO 패키지 정리 2 - 보조스트림

 

InputStreamReader 예제

 

package sec05.exam01.support;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;

public class InputStreamReaderExample {

	public static void main(String[] args) throws Exception {
		
		//콘솔에서 한글 입력받기 : 소스 스트림이 바이트 기반 스트림이지만.
		//데이터가 문자일 경우 사용할 수 있다.
		//Reader 와 Writer는 문자 단위로 입출력하기 때문에 바이트 기반 스트림보다는 편리하다.
		//문자셋의 종류를 지정할 수 있기 때문에 다양한 문자를 입출력할 수 있다.
		
		
		//입력 스트림
		//소스 스트림이 바이트 기반 스트림이다. 데이터는 문자이다.
		InputStream is = System.in;
		
		
		//다른 스트림과 연결이 되어 여러가지 편리한 기능을 제공해주는 보조 스트림
		//문자변환, 입출력 성능향상, 기본 데이터 타입 입출력, 객체 입출력 등의 기능을 제공
		//InputStreamReader 는 바이트 입력 스트림에 연결되어 문자 입력 스트림인 Reader로 변환시키는 보조 스트림이다.
		Reader reader = new InputStreamReader(is);
		
		int readCharNo;
		
		
		char[] cbuf = new char[100];
		
		
		while((readCharNo = reader.read(cbuf)) != -1 ) {
			
			String data = new String(cbuf,0, readCharNo);
			System.out.println(data);
		}
		
		
		reader.close();
		
	}

}

 

OutputStreamWriter 예제

 

package sec05.exam01.support;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class OutputStreamWriterExample {

	public static void main(String[] args) throws Exception {
		
		//바이트 출력 스트림
		FileOutputStream fos = new FileOutputStream("/Users/k/Documents/workspace/chat/src/OutputStreamWriter.txt");
		
		//문자 출력 스트림
		Writer writer = new OutputStreamWriter(fos);

		
		String data = "바이트 출력 스트림을 문자 출력 스트림으로 변환";
		
		writer.write(data);
		
		writer.flush();
		
		writer.close();
		
		fos.close();
		
		System.out.println("파일 저장 끝 - ");
		
	}

}

 

BufferedInputStream 예제

 

package sec05.exam01.support;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class P_BufferedInputStreamExample {

	public static void main(String[] args) throws Exception {
		
		
		/*
		 
		 입출력 성능에 영향을 미치는 입출력 소스
		 1. 하드 디스크, 2. 느린 네트워크
		 
		 버퍼를 이용한 해결
		 - 입출력 소스와 직접 작업하지 않고, 버퍼와 작업하므로 실행 성능을 향상
		 
		 프로그램은 쓰기 속도가 향상
		 버퍼가 차게되면 데이터를 한꺼번에 하드 디스크로 보내므로써 출력 횟수를 줄여줌.
		 
		 *바이트 기반 스트림 : BufferedInputStream , BufferedOutputStream
		 *문자 기반 스트림 : BufferedReader , BufferedWriter 
		 
		 BufferedInputStream : 바이트 입력 스트림에 연결되어 버퍼를 제공해주는 보조 스트림. 
		 BufferedReader : 문자 입력 스트림에 연결되어 버퍼를 제공해 주는 보조 스트림
		 
		 
		 */
		
		
		long start = 0;
		long end = 0;
		
		FileInputStream fis1 = new FileInputStream("/Users/k/Documents/workspace/chat/src/test/house.jpg");
		
		start = System.currentTimeMillis();
		
		while(fis1.read() != -1){}
		
		end = System.currentTimeMillis();
		
		System.out.println("사용하지 않았을때 : " + (end - start) + "ms");
		
		fis1.close();
		
		
		
		//바이트 입력 스트림
		FileInputStream fis2 = new FileInputStream("/Users/k/Documents/workspace/chat/src/test/house.jpg");
		
		//바이트 입력 스트림에 연결되어 버퍼를 제공해주는 보조 스트림. 
		BufferedInputStream bis = new BufferedInputStream(fis2); //버퍼 스트림 생성
		
		//bis = new BufferedInputStream(바이트 입력 스트림);
		
		start = System.currentTimeMillis();
		
		while(bis.read() != -1){}
		
		end = System.currentTimeMillis();
		
		System.out.println("사용했을 때 : " + (end - start) + "ms");
		
		fis2.close();
		
		
		
		/*
		 사용하지 않았을때 : 61ms
		 사용했을 때 : 12ms

		 */
		

	}

}

 

BufferedOutputStream 예제

 

package sec05.exam01.support;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class P_BufferedOutputStreamExample {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		
		
		/*
		 * BufferedOutputStream 은 바이트 출력 스트림에 연결되어 버퍼를 제공해 주는 보조 스트림 
		 * BufferedWriter 는 문자 출력 스트림에 연결되어 버퍼를 제공해 주는 보조 스트림 
		 */
		
		
		FileInputStream fis = null;
		FileOutputStream fos = null;
		
		
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		
		int data = -1;
		long start = 0;
		long end = 0;
		
		//바이트 스트림으로 읽어서
		fis	= new FileInputStream("/Users/k/Documents/workspace/chat/src/test/house.jpg");
		bis = new BufferedInputStream(fis);
		
		
		
		//바이트 스트림에 쓰기
		fos = new FileOutputStream("/Users/k/Documents/workspace/chat/src/test/kkk.jpg");
		
		
		start = System.currentTimeMillis();
		
		
		while((data = bis.read()) != -1) {
			
			//바이트 스트림에 쓰기
			fos.write(data);
		}
		
		
		fos.flush();
		
		end = System.currentTimeMillis();
		
		fos.close(); 
		bis.close(); 
		fis.close();
		
		System.out.println("사용하지 않았을 때: " + (end-start) + "ms");
		
		
		
		// ####################################################
		
		
		//바이트 스트림으로 읽어서
		fis	= new FileInputStream("/Users/k/Documents/workspace/chat/src/test/house.jpg");
		bis = new BufferedInputStream(fis);
		
		
		
		//바이트 스트림에 쓰기
		fos = new FileOutputStream("/Users/k/Documents/workspace/chat/src/test/kkk.jpg");
		
		//바이트 출력 스트림에 연결되어 버퍼를 제공해 주는 보조 스트림
		bos = new BufferedOutputStream(fos);
		
		start = System.currentTimeMillis();
		
		
		while((data = bis.read()) != -1) {
			
			//보조 바이트 스트림에 쓰기
			bos.write(data);
		}
		
		
		fos.flush();
		
		end = System.currentTimeMillis();
		
		fos.close(); 
		bis.close(); 
		fis.close();
		
		System.out.println("사용했을 때: " + (end-start) + "ms");
		
		
		/*
		 
		 사용하지 않았을 때: 221ms
		 사용했을 때: 3ms
		 
		 */
		
	}

}

 

InputStreamReader , BufferedReader 예제

 

package sec05.exam01.support;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;

public class P_BufferedReaderExample {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		/*
		 
		 입출력 성능에 영향을 미치는 입출력 소스
		 1. 하드 디스크, 2. 느린 네트워크
		 
		 버퍼를 이용한 해결
		 - 입출력 소스와 직접 작업하지 않고, 버퍼와 작업하므로 실행 성능을 향상
		 
		 프로그램은 쓰기 속도가 향상
		 버퍼가 차게되면 데이터를 한꺼번에 하드 디스크로 보내므로써 출력 횟수를 줄여줌.
		 
		 *바이트 기반 스트림 : BufferedInputStream , BufferedOutputStream
		 *문자 기반 스트림 : BufferedReader , BufferedWriter 
		 
		 BufferedInputStream : 바이트 입력 스트림에 연결되어 버퍼를 제공해주는 보조 스트림. 
		 BufferedReader : 문자 입력 스트림에 연결되어 버퍼를 제공해 주는 보조 스트림
		 
		 
		 */
		
		//콘솔라인 입력 스트림
		InputStream is = System.in;
		Reader reader = new InputStreamReader(is);
		
		//BufferedReader를 사용해서 콘솔로 부터 라인 단위로 읽기
		BufferedReader br = new BufferedReader(reader);
		
		
		//br = new BufferedReader(문자입력 스트림);
		
		System.out.print("입력 : ");
		
		
		/*
		 * BufferedReade 는 readLine() 메소드를 추가적으로 가지고 있다.
		 * 이 메소드를 이용하면 \r , \n 로 구분된 행 단위의 문자열을 한꺼번에 읽을 수 있다.
		 * 
		 */
		
		String lineString = br.readLine();
		System.out.print("출력 : " + lineString);
		
	}

}

 

DataOutputStream , DataInputStream 예제

 

package sec05.exam01.support;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class Q_DataInputOutputStreamExample {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		
		FileOutputStream fos = new FileOutputStream("/Users/k/Documents/workspace/chat/src/DataOutputStream.txt");
		
		DataOutputStream dos = new DataOutputStream(fos);
		
		dos.writeUTF("홍긴둥둥");
		dos.writeDouble(2.3);
		dos.writeInt(1);
		
		
		dos.writeUTF("콩민");
		
		dos.writeDouble(4.333);
		dos.writeInt(222);
		
		
		dos.flush();
		dos.close();
		fos.close();
		
		
		FileInputStream fis = new FileInputStream("/Users/k/Documents/workspace/chat/src/DataOutputStream.txt");
		DataInputStream dis = new DataInputStream(fis);
		
		
		for(int i = 0; i < 2; i++) {
			
			String name = dis.readUTF();
			double score = dis.readDouble();
			int order = dis.readInt();
			System.out.println(name + " : " + score + " : " + order);
		}
		
		
		dis.close();
		fis.close();
		
	}

	
	/*
	 *  홍긴둥둥 : 2.3 : 1
		콩민 : 4.333 : 222
	 */
	
}

 

InetAddress 예제

 

package sec06.exam01.inetaddress;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressExample {

	public static void main(String[] args) {
		

		try {
			
			InetAddress local = InetAddress.getLocalHost();
			
			
			System.out.println("내 컴퓨터 ip 주소 :" +local.getHostAddress());
			
			
			InetAddress [] iaArr = InetAddress.getAllByName("www.naver.com");
			
			for(InetAddress remote : iaArr) {
				
				System.out.println("naver ip 주소 :" +remote.getHostAddress());
				
			}
			
			
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

}

 

 

참고

https://blog.naver.com/plateauh/222085091595

 

이것이 자바다 :: 이론 정리 18장 - IO 기반 입출력 및 네트워킹

CHAPTER 18 - IO 기반 입출력 및 네트워킹 ​​18.1 IO 패키지 소개 ➡ 데이터 입출력!: 프로그...

blog.naver.com

https://estindev.tistory.com/entry/%EC%9E%90%EB%B0%94-IO-%EC%A0%95%EB%A6%AC

https://willbfine.tistory.com/413?category=835334