BufferedReaderTest

    package kr.co.kihd.bufferedoutputstream;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.Reader;
    
    
    public class BufferedReaderTest {
    
    	public static void main(String[] args) throws Exception {
    		//주스트림은 바이트 기반
    		InputStream iStream = System.in;
    		//보조스트림 첫번째는 바이트를 문자로 바꿔주는 InputStreamReader를 연결함.
    		Reader reader = new InputStreamReader(iStream);
    		//보조스트림 두번째는 속도 및 성능 향상을 해주는 BufferedReader를 연결함.
    		BufferedReader bReader = new BufferedReader(reader);
    		
    		System.out.print("입력 : ");
    		
    		//BufferedReader보조스트림은 readLine()사용하기 위해 많이 사용함.
    		//readLine() : 한줄 단위 읽어들임
    		String lineString = bReader.readLine();
    		System.out.println("출력 : " + lineString);
    		
    		bReader.close();
    		reader.close();
    		iStream.close();
    	}
    
    }
    

    BufferedOutputStream 사용 유무에 따른 시간 비교 + byteArray사용

    package kr.co.kihd.bufferedoutputstream;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    
    public class BufferedOutputStreamTest {
    	
    	public static void main(String[] args) throws Exception {
    		File file = new File("C:\\workspace\\chap26(IO입출력2)\\src\\kr\\co\\kihd\\bufferedoutputstream\\We Never Go Alone.mp4");
    		System.out.println("파일의 크기 : " + (file.length())/1024 + "kbyte");
    		System.out.println("파일의 크기 : " + ((file.length())/1024)/1024 + "Mbyte");
    
    		//주스트림
    		FileInputStream fInputStream = null;
    		FileOutputStream fOutputStream = null;
    		
    		//보조스트림
    		BufferedInputStream bInputStream = null;
    		BufferedOutputStream bOutputStream = null;
    		
    		int dataCount = 0;
    		long start = 0;
    		long end = 0;
    		byte[] bArr = new byte[10000];
    		
    		//주스티림에 보조스트림을 연결함.(입력)
    		fInputStream = new FileInputStream(file);
    		bInputStream = new BufferedInputStream(fInputStream);
    		
    		fOutputStream = new FileOutputStream("C:\\Temp1\\우리는 결코 혼자가 아니다.mp3");
    		bOutputStream = new BufferedOutputStream(fOutputStream);
    		
    		//읽고 저장하기 전 시간 저장
    		start = System.currentTimeMillis();
    		
    		//1바이트씩 읽고 1바이트씩 저장하는 경우
    		while( (dataCount = bInputStream.read(bArr)) != -1) {
    			fOutputStream.write(bArr,0,dataCount);
    		}
    		fOutputStream.flush();
    		
    		//읽고 저장한 후 시간을 저장
    		end = System.currentTimeMillis();
    		
    		System.out.println("BufferedOutputStream을 사용하지 않았을 때 : " + (end - start) + "ms");
    		
    		//BufferedOutputStream 사용했을 때..
    		start = System.currentTimeMillis();
    		
    		//1바이트씩 읽고 1바이트씩 저장하는 경우
    		while( (dataCount = bInputStream.read(bArr)) != -1) {
    			bOutputStream.write(bArr, 0, dataCount);
    		}
    		fOutputStream.flush();
    		
    		//읽고 저장한 후 시간을 저장
    		end = System.currentTimeMillis();
    		
    		System.out.println("BufferedOutputStream을 사용했을 때 : " + (end - start) + "ms");
    	
    		
    		//자원 해제
    		bOutputStream.close();
    		bInputStream.close();
    		fInputStream.close();
    		fOutputStream.close();
    		
    	}
    	
    }

    파일의 크기 : 4495kbyte
    파일의 크기 : 4Mbyte
    BufferedOutputStream을 사용하지 않았을 때 : 7ms
    BufferedOutputStream을 사용했을 때 : 0ms


    기타 타입 입출력 보조 스트림

    package kr.co.kihd.datainputoutputstream;
    
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    
    public class DataInputOutputStreamTest {
    	
    	public static void main(String[] args) throws Exception {
    		
    		//파일객체 생성
    		File file = new File("C:\\Temp1\\primitiveData.dat");
    		//주스트림 생성
    		FileOutputStream fOutputStream = new FileOutputStream(file);
    		System.out.println("파일의 크기 : " + file.length());
    		
    		//보조스트림 연결
    		/*
    		 * 기본타입(int, long, float, String...등) 출력을 하기 위한 
    		 * 스트림 DataOutputStream이다.
    		 */
    		DataOutputStream dOutputStream = new DataOutputStream(fOutputStream);
    		/*
    		 * String을 파일에 저장하기 위해서는 writeUTF()를 사용하는데,
    		 * 한글을 3바이트, 영문자는 1바이트 인식한다.
    		 * 하지만, String내보낼 경우 2바이트가 포함된다.
    		 */
    		
    		dOutputStream.writeUTF("최지만"); //11바이트 추가
    		System.out.println("손홍민 저장 후 - 파일의 크기 : " + file.length() + "byte");
    		
    		dOutputStream.writeDouble(100.15); //8바이트 추가
    		System.out.println("100.15 저장 후 - 파일의 크기 : " + file.length() + "byte");
    		
    		dOutputStream.writeInt(777); //4바이트 추가
    		System.out.println("777 저장 후 - 파일의 크기 : " + file.length() + "byte");
    		
    		dOutputStream.writeUTF("이순신"); //11바이트 추가
    		System.out.println("이순신 저장 후 - 파일의 크기 : " + file.length() + "byte");
    		
    		dOutputStream.writeDouble(717.15); //8바이트 추가
    		System.out.println("717.15 저장 후 - 파일의 크기 : " + file.length() + "byte");
    		
    		dOutputStream.writeInt(555); //4바이트 추가
    		System.out.println("555 저장 후 - 파일의 크기 : " + file.length() + "byte");
    		
    		dOutputStream.flush();
    		dOutputStream.close();
    		fOutputStream.close();
    		
    		//----------------------------------------------------------------------------
    		
    		System.out.println();
    		System.out.println("읽어오는 데이터 출력");
    		
    		//주스트림
    		FileInputStream fInputStream = new FileInputStream(file);
    		//보조스트림 연결
    		DataInputStream dInputStream = new DataInputStream(fInputStream);
    		
    		//프로그램으로 읽어들일때는 저장할때의 순서와 반드시 동일하게 읽어와야 한다.
    		
    		for(int i = 0; i<2; i++) {
    			System.out.println((i+1) + "번째 읽은 문자열 : " + dInputStream.readUTF());
    			System.out.println((i+1) + "번째 읽은 double값 : " + dInputStream.readDouble());
    			System.out.println( (i+1) + "번째 읽은 int값 : " + dInputStream.readInt());
    			
    		}
    		System.out.println("파일크기(byte) : " + file.length() + "byte 읽었습니다.");
    		
    		dInputStream.close();
    		fInputStream.close();
    		
    		
    	}
    	
    }
    

    파일의 크기 : 0
    손홍민 저장 후 - 파일의 크기 : 11byte
    100.15 저장 후 - 파일의 크기 : 19byte
    777 저장 후 - 파일의 크기 : 23byte
    이순신 저장 후 - 파일의 크기 : 34byte
    717.15 저장 후 - 파일의 크기 : 42byte
    555 저장 후 - 파일의 크기 : 46byte

    읽어오는 데이터 출력
    1번째 읽은 문자열 : 최지만
    1번째 읽은 double값 : 100.15
    1번째 읽은 int값 : 777
    2번째 읽은 문자열 : 이순신
    2번째 읽은 double값 : 717.15
    2번째 읽은 int값 : 555
    파일크기(byte) : 46byte 읽었습니다.


    프린트 보조 스트림

    package kr.co.kihd.printstream;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.PrintStream;
    
    public class PrintStreamTest {
    // PrintStream :보조스트림 중에서 개행이 빈번하게 일어날 경우 사용하면 좋음.
    	public static void main(String[] args) throws Exception {
    		File file = new File("C:\\Temp1\\printStream.txt");
    		FileOutputStream fOutputStream = new FileOutputStream(file);
    		PrintStream pStream = new PrintStream(fOutputStream);
    		
    		//파일에 출력을 한다.(출력스트림이라서 System.out(콘솔)을 사용해도 된다.)
    		pStream.println("[프린트 스트림 사용]");
    		pStream.println("나는");
    		pStream.println("자바 프로그램으로 ");
    		pStream.println("프린터가 출력되는 것처럼 ");
    		pStream.println("프로그램을 만들어서 데이터를 출력한다.");
    		
    		System.out.println("파일 저장 완료");
    		
    		//형식 지정자와 매개변수의 갯수를 반드시 동일하게 설정해야한다.
    		System.out.printf("%d %d\n", 10, 20);
    		System.out.printf("%.1f %d\n", 10.123, 20);
    		System.out.printf("%.2f %d\n", 10.123, 20);
    		System.out.printf("%.2f %s", 10.123, "자바");
    		
    		pStream.flush();
    		pStream.close();
    		fOutputStream.close();
    		
    	}
    
    }
    

    파일 저장 완료
    10 20
    10.1 20
    10.12 20
    10.12 자바


    콘솔 입출력 

    콘솔

    시스템을 사용하기 위해 키보드로 입력을 받고 화면으로 출력하는 소프트웨어을 말함.

    System.in 필드

     

    package kr.co.kihd.console;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Arrays;
    
    //System.in
    public class SystemInTest {
    	
    	public static void main(String[] args) throws Exception {
    		
    		//콘솔로부터 입력을 받기 위해서 System.in필드를 입력스트림에다가 대입함.
    		InputStream iStream = System.in;
    		byte[] bArr = new byte[100];
    		System.out.print("이름 : ");
    		
    		//키보드로 입력한 데이터를 bArr배열에 저장하고, 읽은 바이트 수를 리턴함.
    		int nameBytes = iStream.read(bArr); //encoding
    		System.out.println(Arrays.toString(bArr));
    		
    		//엔터키(캐리지리턴(13), 라인피드(10) 제외한 나머지를 문자열로 만든다.
    		String name = new String(bArr,0, nameBytes-2);
    		System.out.println("입력한 이름 : " + name);
    		
    		System.out.print("남길 말 : ");
    		int comBytes = iStream.read(bArr);
    		System.out.println(Arrays.toString(bArr));
    		
    		String comment = new String(bArr, 0, comBytes-2);
    		System.out.println("남긴 말 : ");
    		
    		
    		iStream.close();
    		
    	}
    	
    }
    

    아스키코드표 출력

    package kr.co.kihd.console;
    
    import java.io.IOException;
    import java.io.OutputStream;
    
    public class SystemOutTest {
    
    	public static void main(String[] args) throws Exception {
    		
    		/*
    		 * PrintStream(System.out)은 OutputStream의 자손클래스 이므로
    		 * 얼마든지 대입이 가능하다. (다형성)
    		 * 
    		 */
    		
    		OutputStream oStream = System.out;
    		
    		//아스키코드표 출력
    		for(byte b=48; b<58; b++) {
    			System.out.print(b + "\t");
    			System.out.print("아스키 코드표의 문자값 : ");
    			oStream.write(b);
    			System.out.println();
    		}
    		
    		oStream.write(13); //출력스트림을 이용한 줄바꿈
    		
    		for(byte b=97; b<127; b++) {
    			System.out.print(b + "\t");     //기계가 알아보기 쉽다.
    			System.out.print("아스키 코드표의 문자값 : ");
    			oStream.write(b);				//사람이 알아보기 쉽다.
    			System.out.println();
    		}
    			
    		oStream.write(13);
    	}
    
    }
    

    48 아스키 코드표의 문자값 : 0
    49 아스키 코드표의 문자값 : 1
    50 아스키 코드표의 문자값 : 2
    51 아스키 코드표의 문자값 : 3
    52 아스키 코드표의 문자값 : 4
    53 아스키 코드표의 문자값 : 5
    54 아스키 코드표의 문자값 : 6
    55 아스키 코드표의 문자값 : 7
    56 아스키 코드표의 문자값 : 8
    57 아스키 코드표의 문자값 : 9

    97 아스키 코드표의 문자값 : a
    98 아스키 코드표의 문자값 : b
    99 아스키 코드표의 문자값 : c
    100 아스키 코드표의 문자값 : d
    101 아스키 코드표의 문자값 : e
    102 아스키 코드표의 문자값 : f
    103 아스키 코드표의 문자값 : g
    104 아스키 코드표의 문자값 : h
    105 아스키 코드표의 문자값 : i
    106 아스키 코드표의 문자값 : j
    107 아스키 코드표의 문자값 : k
    108 아스키 코드표의 문자값 : l
    109 아스키 코드표의 문자값 : m
    110 아스키 코드표의 문자값 : n
    111 아스키 코드표의 문자값 : o
    112 아스키 코드표의 문자값 : p
    113 아스키 코드표의 문자값 : q
    114 아스키 코드표의 문자값 : r
    115 아스키 코드표의 문자값 : s
    116 아스키 코드표의 문자값 : t
    117 아스키 코드표의 문자값 : u
    118 아스키 코드표의 문자값 : v
    119 아스키 코드표의 문자값 : w
    120 아스키 코드표의 문자값 : x
    121 아스키 코드표의 문자값 : y
    122 아스키 코드표의 문자값 : z
    123 아스키 코드표의 문자값 : {
    124 아스키 코드표의 문자값 : |
    125 아스키 코드표의 문자값 : }
    126 아스키 코드표의 문자값 : ~

     


    콘솔 테스트

    package kr.co.kihd.console;
    
    import java.io.Console;
    
    public class ConsoleTest {
    
    	public static void main(String[] args) {
    		
    		Console console = System.console();
    		/*
    		 * Console클래스는 실행시 이클립스의 콘솔뷰에서 하게 되면 null을 리턴한다.
    		 * 그래서 NullPointerException을 발생시킨다.
    		 * 반드시 명령 프롬프트에서 실행해야한다.
    		 */
    		System.out.print("id : ");
    		String id = console.readLine();
    		
    		System.out.print("password : ");
    		//콘솔창에 입력한 문자가 에코출력, 즉 보이지 않는다.
    		char[] password = console.readPassword();
    		String pStr = new String(password);
    		
    		System.out.println("--------------------------------------");
    		System.out.println("id" + id);
    		System.out.println("pwd" + pStr);
    	}
    
    }
    
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading