제11 장자바입출력 Java_surce->src->ch11
I/O Stream gic 자바입출력 2
서버와클라이언트의소켓준비 자바입출력 3
11.1.1 스트림개념 스트림 순서가있고, 길이가정해져있지않은데이터흐름종류 자바입출력 바이트 ( 바이너리, 숫자 ) 텍스트 ( 문자 )...InputStream...OutputputStream...Reader...Writer 자바입출력 4
11.1.1 스트림개념 바이트스트림 바이너리 (binary) 데이터와숫자를읽고, 쓰기위해서사용. - 예 : 그림파일, 동영상파일, 응용프로그램파일등 바이트단위로입출력작업 InputStream Java Prgram OutputStream 자바입출력 5
11.1.1 스트림개념 문자스트림 문자스트림은문자데이터를읽고, 쓰기위해서사용. 인코딩을자동으로변환해줌 KSC5601 인코딩 Reader 유니코드인코딩 Java Prgram Writer KSC5601 인코딩 자바입출력 6
11.1.2 자바입출력클래스분류와상속관계 용도에따른분류 데이터싱크스트림 - 데이터를근원지에서직접읽거나, 목적지에기록하는클래스들 데이터프로세싱스트림 - 다른스트림을이용해서중간에서어떤작업을수행하는클래스들 샤워의비유 수도꼭지 -> 싱크스트림 샤워기, 수도꼭지와샤워기를연결하는것 -> 프로세싱스트림 Java 싱크스트림 Prgram 프로세싱스트림 자바입출력 7
11.1.2 자바입출력클래스분류와상속관계 클래스들분류 자바입출력 8
11.1.2 자바입출력클래스분류와상속관계 싱크스트림클래스들 Cnse System.in/ut 자바입출력 9
11.1.2 자바입출력클래스분류와상속관계 데이터프로세싱스트림클래스 데이터프로세싱스트림은항상다른스트림을이용해서만생성가능데이터프로세싱스트림의생성자는다른스트림을매개변수로받게됨 자바입출력 10
11.1.2 자바입출력클래스분류와상속관계 바이트스트림상속관계 InputStream 과 OutputStream 으로부터상속받음. 회색은싱크스트림클래스 자바입출력 11
11.1.2 자바입출력클래스분류와상속관계 문자스트림상속관계 Reader 와 Writer 클래스로부터상속받는다. 회색은싱크스트림클래스 자바입출력 12
11.2.1 InputStream/OutputStream 추상클래스 InputStream 클래스 바이트 (byte) 입력스트림을위한가장상위클래스. System.in 대표적인메소드들 -int read() -입력스트림에서한바이트를읽어서리턴. -int read(byte[] b, intff, inten) -입력스트림에서 en 개의바이트를읽어서바이트배열 b에저장. - int read(byte[] b) - 배열의크기만큼읽는다. 읽은바이트수리턴. 자바입출력 13
Input Stream chain exam Data Surce prgram FieInputStream BufferedInputStream DataInputStream 자바입출력 14
OutputStream chain exam prgram Data Surce DataOutputStream BufferedOutputStream FieOutputStream 자바입출력 15
11.2.1 InputStream/OutputStream 추상클래스 예제 : SimpeRead.java 8 try { 9 b = System.in.read(); 10 whie(b!= -1) { 11 System.ut.print((char)b); 12 cunt++; 13 b = System.in.read(); 14 } 15 } catch(ioexceptin e) { 16 System.ut.printn(e); 17 } 18 System.ut.printn(); 결과 C:\> java SimpeRead He He 한글??±? ^Z tta bytes:13 19 System.ut.printn("tta byte:" + cunt); 자바입출력 16
11.2.1 InputStream/OutputStream 추상클래스 콘솔 리다이렉션 C: > java SimpeRead < SimpeRead.java imprt java.i.ioexceptin;... C: > java SimpeRead < SimpeRead.java > utput.txt C: > mre utput.txt imprt java.i.ioexceptin; 자바입출력 17
11.2.1 InputStream/OutputStream 추상클래스 CnseReader 클래스 콘솔에서데이터를쉽게읽기위한사용자정의클래스 예제 : CnseReader.java 3 pubic cass CnseReader extends BufferedReader { 4 pubic CnseReader(Reader in) thrws IOExceptin { 5 super(in); 6 } 7 8 pubic CnseReader(InputStream in) thrws IOExceptin { 9 super(new InputStreamReader(in)); 10 } 11 12 pubic int readint() thrws IOExceptin { 13 return Integer.parseInt(readLine().trim()); 자바입출력 18
11.2.1 InputStream/OutputStream 추상클래스 예제 : CnseReader.java( 계속 ) 16 pubic String readstring() thrws IOExceptin { 17 return readline().trim(); 18 } 19 20 pubic char readchar() thrws IOExceptin { 21 String ine = readline().trim(); 22 return ine.charat(0); 23 } 24 25 pubic dube readdube() thrws IOExceptin { 26 Dube d = new Dube(readLine().trim()); 27 return d.dubevaue(); 자바입출력 19
11.2.1 InputStream/OutputStream 추상클래스 예제 : CnseReaderTest.java 11 CnseReader in = new CnseReader(System.in); 12 System.ut.print(" 정수를입력해주세요 :"); 13 ivaue = in.readint(); 14 System.ut.printn("vaue = " + ivaue); 15 System.ut.print(" n실수를입력해주세요 :"); 16 dvaue = in.readdube(); 17 System.ut.printn("vaue = " + dvaue); 18 System.ut.print(" n문자를입력해주세요 :"); 19 cvaue = in.readchar(); 20 System.ut.printn("vaue = " + cvaue); 21 System.ut.print(" n문자열을입력해주세요 :"); 22 svaue = in.readstring(); 23 System.ut.printn("vaue = " + svaue); 자바입출력 20
11.2.1 InputStream/OutputStream 추상클래스 Cpier 클래스 입력스트림에서읽은데이터를출력스트림으로출력하는사용자 정의클래스 예제 : Cpier.java 3 pubic cass Cpier { 4 prtected InputStream in; 5 prtected OutputStream ut; 6 prtected byte data[]; 7 8 pubic Cpier(InputStream in, OutputStream ut, int sz) { 9 this.in = in; 10 this.ut = ut; 11 data = new byte[sz]; 자바입출력 21
11.2.1 InputStream/OutputStream 추상클래스 예제 : Cpier.java( 계속 ) 14 pubic Cpier(InputStream in, OutputStream ut) { 15 this(in, ut, 1024); 16 } 17 18 pubic vid cpy() thrws IOExceptin { 19 int n = 0; 20 whie((n = in.read(data))!= -1) { 21 ut.write(data, 0, n); 22 } 23 in.cse(); 24 ut.cse(); 자바입출력 22
11.2.2 FieInputStream/FieOutputStream FieInputStream 파일에서바이트단위로내용을읽기위해사용생성자 - FieInputStream(Fie fie) - FieInputStream(String name) FieOutputStream 파일로바이트단위로내용을출력하기위해사용생성자 - FieOutputStream(Fie fie) - FieOutputStream(String name, bean append) - FieOutputStream(String name) 자바입출력 23
11.2.2 FieInputStream/FieOutputStream 예제 : CnseCpy.java 결과 C:\> java CnseCpy abc.txt 4 pubic static vid main(string args[]) { 한글입니다. 5 if(args.ength!= 1) { ^Z 6 System.ut.printn( C:\> mre abc.txt 7 "usage: java CnseCpy <fiename>"); 한글입니다. 8 System.exit(1); 9 } 10 try { 11 Cpier cp = new Cpier(System.in, 12 new FieOutputStream(args[0])); 13 cp.cpy(); 자바입출력 24
11.2.2 FieInputStream/FieOutputStream 예제 : Mre.java 4 pubic static vid main(string args[]) { 5 if(args.ength!= 1) { 6 System.ut.printn( 7 "usage: java Mre <fiename>"); 8 System.exit(1); 9 } 10 try { 결과 C:\> java Mre Mre.java imprt java.i.*; pubic cass Mre {... 11 Cpier cp = new Cpier(new FieInputStream(args[0]), 12 System.ut); 13 cp.cpy(); 자바입출력 25
11.2.2 FieInputStream/FieOutputStream 예제 : FieCpy.java 결과 C:\> java FieCpy abc.txt bc.txt 5 if(args.ength!= 2) { 파일복사가완료되었습니다. 6 System.ut.print("usage: java FieCpy "); C:\> mre bc.txt 7 System.ut.printn("<fiename> <fiename>"); 한글입니다. 8 System.exit(1); 9 } 10 try { 11 Cpier cp = new Cpier(new FieInputStream(args[0]), 12 new FieOutputStream(args[1])); 13 cp.cpy(); 14 System.ut.printn(" 파일복사가완료되었습니다."); 자바입출력 26
11.2.3 FieReader/FieWriter FieReader 파일에서문자단위로내용을읽을때사용생성자 - FieReader(Fie fie) - FieReader(String fiename) FieWriter 파일에문자데이터를출력할때사용생성자 - FieWriter(Fie fie) - FieWriter(String fiename, bean append) - FieWriter(String fiename) 자바입출력 27
11.2.3 FieReader/FieWriter 예제 : ReadFieData.java 10 try { 11 CnseReader in = new CnseReader( 12 new FieReader("data.txt")); 13 ivaue = in.readint(); 14 System.ut.printn("vaue = " + ivaue); 15 dvaue = in.readdube(); 16 System.ut.printn("vaue = " + dvaue); 17 cvaue = in.readchar(); 18 System.ut.printn("vaue = " + cvaue); 19 svaue = in.readstring(); 20 System.ut.printn("vaue = " + svaue); 자바입출력 28
11.2.4 InputStreamReader/OutputStreamWriter InputStreamReader 입력스트림을 Reader 타입으로변환생성자 - InputStreamReader(InputStream in, String enc) - InputStreamReader(InputStream in) OutputStreamWriter 출력스트림을 Writer 클래스로변환생성자 - OutputStreamWriter(OutputStream ut, String enc) - OutputStreamWriter(OutputStream ut) 자바입출력 29
11.2.5 PrintStream/PrintWriter PrintStream 데이터출력 ( 예 : System.ut, System.err) 생성자 - PrintStream(OutputStream ut, bean autfush) - PrintStream(OutputStream ut) PrintWriter 문자데이터출력생성자 - PrintWriter(OutputStream ut, bean autfush) - PrintWriter(OutputStream ut) - PrintWriter(Writer ut, bean autfush) - PrintWriter(Writer ut) 자바입출력 30
11.2.5 PrintStream/PrintWriter CnseWriter 출력을보다편리하게할수있는사용자정의클래스 예제 : CnseWriter.java 4 pubic cass CnseWriter extends PrintWriter { 5 pubic CnseWriter(OutputStream ut) { 6 super(ut, true); 9 pubic CnseWriter(Writer ut) { 10 super(ut, true); 13 pubic vid printwn(ng vaue) { 14 String frmat = "W#,###"; 15 DecimaFrmat df = new DecimaFrmat(frmat); 16 print(df.frmat(vaue)); 자바입출력 31
11.2.5 PrintStream/PrintWriter 예제 : CnseWriter.java( 계속 ) 24 pubic vid printdar(fat vaue) { 25 String frmat = "$#,###.00"; 26 DecimaFrmat df = new DecimaFrmat(frmat); 27 print(df.frmat(vaue)); 35 pubic vid print(dube vaue, int digit) { 36 String frmat = "#."; 37 fr(int i=0; i < digit; i++) { 38 frmat += "#"; 39 } 40 DecimaFrmat df = new DecimaFrmat(frmat); 41 print(df.frmat(vaue)); 42 fush(); 자바입출력 32
11.2.5 PrintStream/PrintWriter 예제 : CnseWriterTest.java 5 CnseWriter ut = new CnseWriter(System.ut); 6 dube d = 123.456789; 7 int mney = 1234567; 8 9 ut.printn(d); 10 ut.printn(d, 2); 11 ut.printnwn(mney); 12 ut.printndar(mney); 결과 C:\> java CnseWriterTest 123.456789 123.46 W1,234,567 $1,234,567.00 자바입출력 33
11.2.6 BufferedInputStream/BufferedOutputStream BufferedInputStream 바이트입력에서성능을높이기위해서버퍼를사용하는클래스생성자 - BufferedInputStream(InputStream in, int size) - BufferedInputStream(InputStream in) BufferedOutputStream 바이트출력에서성능을높이기위해서버퍼를사용하는클래스생성자 - BufferedOutputStream(OutputStream ut, int size) - BufferedOutputStream(OutputStream ut) 자바입출력 34
11.2.7 BufferedReader/BufferedWriter BufferedReader 버퍼를사용하는 Reader 생성자및중요메소드 - BufferedReader(Reader in, int sz) - BufferedReader(Reader in) - String readline() BufferedWriter 버퍼를사용하는 Writer 생성자 - BufferedWriter(Writer ut, int sz) - BufferedWriter(Writer ut) 자바입출력 35
11.2.7 BufferedReader/BufferedWriter 예제 : CnfiguratinReader.java 28 BufferedReader br = 29 new BufferedReader(new FieReader(fie) ); 30 31 whie((r=br.readline())!= nu) { 32 r = r.trim(); 33 if(r.charat(0) == cmment ) { 34 cntinue; 35 } ese { 36 StringTkenizer st = 37 new StringTkenizer(r,dem,fase); 38 String key = st.nexttken(); 39 String vaue = st.nexttken(); 40 ht.put(key, vaue); 자바입출력 36
11.2.7 BufferedReader/BufferedWriter 예제 : CnfiguratinReader.java( 계속 ) 46 pubic String getvaue(string name) { 47 return (String)ht.get(name); 결과 48 } C:\> java CnfiguratinReader 49 7690 50 pubic static vid main(string args[]) { it.mkp.ac.kr 51 CnfiguratinReader cr = admin@it.mkp.ac.kr 52 new CnfiguratinReader("server.cnf"); 53 try { 54 cr.parse(); 55 System.ut.printn(cr.getVaue("prt")); 56 System.ut.printn(cr.getVaue("server")); 57 System.ut.printn(cr.getVaue("admin")); 자바입출력 37
11.2.8 DataInputStream/DataOutputStream DataInputStream 데이터타입별로읽을때사용생성자및중요메소드 - DataInputStream(InputStream in) char readchar() dube readdube() int readint() DataOutputStream 데이터타입별로출력생성자및중요메소드 - DataOutputStream(OutputStream ut) vid writechar(int v) vid writeint(int v) 자바입출력 38
11.2.8 DataInputStream/DataOutputStream 예제 : DataIOTest.java 12 pubic vid write() thrws IOExceptin { 13 DataOutputStream ut = new 14 DataOutputStream(new FieOutputStream(fie)); 15 int vaue[] = Fibnachi.cacuate(n); 16 fr(int i=0; i <= n; i++) { 17 ut.writeint(vaue[i]); 18 //System.ut.printn(vaue[i]); 19 } 20 ut.fush(); 21 ut.cse(); 자바입출력 39
11.2.8 DataInputStream/DataOutputStream 예제 : DataIOTest.java( 계속 ) 24 pubic vid read() thrws IOExceptin { 25 DataInputStream in = 26 new DataInputStream(new FieInputStream(fie)); 27 int n = in.avaiabe()/4; 28 //System.ut.printn("# f data = " + n); 29 fr(int i=0; i < n; i++) { 30 int v = in.readint(); 31 System.ut.printn("f["+i+"] = " + v); 32 } 33 in.cse(); 34 } 자바입출력 40