프로그래머를위한 Java 2, 4 판 제11 장자바입출력
11.1.1 스트림개념 스트림 순서가있고, 길이가정해져있지않은데이터흐름 종류...InputStream 자바입출력 바이트 ( 바이너리, 숫자 ) 텍스트 ( 문자 )...OutputputStream...Reader...Writer 자바입출력 2
11.1.1 스트림개념 바이트스트림 바이너리 (binary) 데이터와숫자를읽고, 쓰기위해서사용. 예 : 그림파일, 동영상파일, 응용프로그램파일등 바이트단위로입출력작업 InputStream Java Program OutputStream 자바입출력 3
11.1.1 스트림개념 문자스트림 문자스트림은문자데이터를읽고, 쓰기위해서사용. 인코딩을자동으로변환해줌 KSC5601 인코딩 Reader 유니코드인코딩 Java Program Writer KSC5601 인코딩 자바입출력 4
11.1.2 자바입출력클래스분류와상속관계 용도에따른분류 데이터싱크스트림 데이터를근원지에서직접읽거나, 목적지에기록하는클래스들 데이터프로세싱스트림 다른스트림을이용해서중간에서어떤작업을수행하는클래스들 샤워의비유 수도꼭지 -> 싱크스트림 샤워기, 수도꼭지와샤워기를연결하는것 -> 프로세싱스트림 Java 싱크스트림 Program 프로세싱스트림 자바입출력 5
11.1.2 자바입출력클래스분류와상속관계 클래스들분류 자바입출력 6
11.1.2 자바입출력클래스분류와상속관계 싱크스트림클래스들 Console System.in/out 자바입출력 7
11.1.2 자바입출력클래스분류와상속관계 데이터프로세싱스트림클래스 데이터프로세싱스트림은항상다른스트림을이용해서만생성가능 데이터프로세싱스트림의생성자는다른스트림을매개변수로받게됨 자바입출력 8
11.1.2 자바입출력클래스분류와상속관계 바이트스트림상속관계 InputStream 과 OutputStream 으로부터상속받음. 회색은싱크스트림클래스 자바입출력 9
11.1.2 자바입출력클래스분류와상속관계 문자스트림상속관계 Reader 와 Writer 클래스로부터상속받는다. 회색은싱크스트림클래스 자바입출력 10
11.2.1 InputStream/OutputStream 추상클래스 InputStream 클래스 바이트 (byte) 입력스트림을위한가장상위클래스. System.in 대표적인메소드들 int read() - 입력스트림에서한바이트를읽어서리턴. int read(byte[] b, int off, int len) - 입력스트림에서 len 개의바이트를읽어서바이트배열 b에저장. int read(byte[] b) - 배열의크기만큼읽는다. 읽은바이트수리턴. 자바입출력 11
11.2.1 InputStream/OutputStream 추상클래스 예제 : SimpleRead.java 8 try { 9 b = System.in.read(); 10 while(b!= -1) { 11 System.out.print((char)b); 12 count++; 13 b = System.in.read(); 14 } 결과 C:\> java SimpleRead Hello Hello 한글??±? ^Z total bytes:13 15 } catch(ioexception e) { 16 System.out.println(e); 17 } 18 System.out.println(); 19 System.out.println("total byte:" + count); 자바입출력 12
11.2.1 InputStream/OutputStream 추상클래스 콘솔 리다이렉션 C: > java SimpleRead < SimpleRead.java import java.io.ioexception;... C: > java SimpleRead < SimpleRead.java > output.txt C: > more output.txt import java.io.ioexception; 자바입출력 13
11.2.1 InputStream/OutputStream 추상클래스 Scanner 클래스 C 언어의 scanf() 함수와비슷한형태의입력을지원함 예제 : ScannerTest.java 7 Scanner sc = Scanner.create(System.in); 8 while(sc.hasnextint()) { 결과 9 int i = sc.nextint(); C:\> java ScannerTest 10 System.out.println(i); ->1 2 a 4 b 1 11 } 2 12 ------------------ 13 System.out.println("------------------"); a 14 while(sc.hasnext()) { 4 b 15 String s = sc.next(); ^Z 자바입출력 14
11.2.1 InputStream/OutputStream 추상클래스 ConsoleReader 클래스 콘솔에서데이터를쉽게읽기위한사용자정의클래스 예제 : ConsoleReader.java 3 public class ConsoleReader extends BufferedReader { 4 public ConsoleReader(Reader in) throws IOException { 5 super(in); 6 } 7 8 public ConsoleReader(InputStream in) throws IOException { 9 super(new InputStreamReader(in)); 10 } 11 12 public int readint() throws IOException { 13 return Integer.parseInt(readLine().trim()); 자바입출력 15
11.2.1 InputStream/OutputStream 추상클래스 예제 : ConsoleReader.java( 계속 ) 16 public String readstring() throws IOException { 17 return readline().trim(); 18 } 19 20 public char readchar() throws IOException { 21 String line = readline().trim(); 22 return line.charat(0); 23 } 24 25 public double readdouble() throws IOException { 26 Double d = new Double(readLine().trim()); 27 return d.doublevalue(); 자바입출력 16
11.2.1 InputStream/OutputStream 추상클래스 예제 : ConsoleReaderTest.java 11 ConsoleReader in = new ConsoleReader(System.in); 12 System.out.print(" 정수를입력해주세요 :"); 13 ivalue = in.readint(); 14 System.out.println("value = " + ivalue); 15 System.out.print(" n 실수를입력해주세요 :"); 16 dvalue = in.readdouble(); 17 System.out.println("value = " + dvalue); 18 System.out.print(" n 문자를입력해주세요 :"); 19 cvalue = in.readchar(); 20 System.out.println("value = " + cvalue); 21 System.out.print(" n 문자열을입력해주세요 :"); 22 svalue = in.readstring(); 23 System.out.println("value = " + svalue); 자바입출력 17
11.2.1 InputStream/OutputStream 추상클래스 Copier 클래스 입력스트림에서읽은데이터를출력스트림으로출력하는사용자정의클래스 예제 : Copier.java 3 public class Copier { 4 protected InputStream in; 5 protected OutputStream out; 6 protected byte data[]; 7 8 public Copier(InputStream in, OutputStream out, int sz) { 9 this.in = in; 10 this.out = out; 11 data = new byte[sz]; 자바입출력 18
11.2.1 InputStream/OutputStream 추상클래스 예제 : Copier.java( 계속 ) 14 public Copier(InputStream in, OutputStream out) { 15 this(in, out, 1024); 16 } 17 18 public void copy() throws IOException { 19 int n = 0; 20 while((n = in.read(data))!= -1) { 21 out.write(data, 0, n); 22 } 23 in.close(); 24 out.close(); 자바입출력 19
11.2.2 FileInputStream/FileOutputStream FileInputStream 파일에서바이트단위로내용을읽기위해사용 생성자 FileInputStream(File file) FileInputStream(String name) FileOutputStream 파일로바이트단위로내용을출력하기위해사용 생성자 FileOutputStream(File file) FileOutputStream(String name, boolean append) FileOutputStream(String name) 자바입출력 20
11.2.2 FileInputStream/FileOutputStream 예제 : ConsoleCopy.java 결과 C:\> java ConsoleCopy abc.txt 4 public static void main(string args[]) { 한글입니다. 5 if(args.length!= 1) { ^Z 6 System.out.println( C:\> more abc.txt 7 "usage: java ConsoleCopy <filename>"); 한글입니다. 8 System.exit(1); 9 } 10 try { 11 Copier cp = new Copier(System.in, 12 new FileOutputStream(args[0])); 13 cp.copy(); 자바입출력 21
11.2.2 FileInputStream/FileOutputStream 예제 : More.java 4 public static void main(string args[]) { 5 if(args.length!= 1) { 6 System.out.println( 7 "usage: java More <filename>"); 결과 C:\> java More More.java import java.io.*; public class More {... 8 System.exit(1); 9 } 10 try { 11 Copier cp = new Copier(new FileInputStream(args[0]), 12 System.out); 13 cp.copy(); 자바입출력 22
11.2.2 FileInputStream/FileOutputStream 예제 : FileCopy.java 결과 C:\> java FileCopy abc.txt bc.txt 5 if(args.length!= 2) { 파일복사가완료되었습니다. 6 System.out.print("usage: java FileCopy "); C:\> more bc.txt 7 System.out.println("<filename> <filename>"); 한글입니다. 8 System.exit(1); 9 } 10 try { 11 Copier cp = new Copier(new FileInputStream(args[0]), 12 new FileOutputStream(args[1])); 13 cp.copy(); 14 System.out.println(" 파일복사가완료되었습니다."); 자바입출력 23
11.2.3 FileReader/FileWriter FileReader 파일에서문자단위로내용을읽을때사용 생성자 FileReader(File file) FileReader(String filename) FileWriter 파일에문자데이터를출력할때사용 생성자 FileWriter(File file) FileWriter(String filename, boolean append) FileWriter(String filename) 자바입출력 24
11.2.3 FileReader/FileWriter 예제 : ReadFileData.java 10 try { 11 ConsoleReader in = new ConsoleReader( 12 new FileReader("data.txt")); 13 ivalue = in.readint(); 14 System.out.println("value = " + ivalue); 15 dvalue = in.readdouble(); 16 System.out.println("value = " + dvalue); 17 cvalue = in.readchar(); 18 System.out.println("value = " + cvalue); 19 svalue = in.readstring(); 20 System.out.println("value = " + svalue); 자바입출력 25
11.2.4 InputStreamReader/OutputStreamWriter InputStreamReader 입력스트림을 Reader 타입으로변환 생성자 InputStreamReader(InputStream in, String enc) InputStreamReader(InputStream in) OutputStreamWriter 출력스트림을 Writer 클래스로변환 생성자 OutputStreamWriter(OutputStream out, String enc) OutputStreamWriter(OutputStream out) 자바입출력 26
11.2.5 PrintStream/PrintWriter PrintStream 데이터출력 ( 예 : System.out, System.err) 생성자 PrintStream(OutputStream out, boolean autoflush) PrintStream(OutputStream out) PrintWriter 문자데이터출력 생성자 PrintWriter(OutputStream out, boolean autoflush) PrintWriter(OutputStream out) PrintWriter(Writer out, boolean autoflush) PrintWriter(Writer out) 자바입출력 27
11.2.5 PrintStream/PrintWriter ConsoleWriter 출력을보다편리하게할수있는사용자정의클래스 예제 : ConsoleWriter.java 4 public class ConsoleWriter extends PrintWriter { 5 public ConsoleWriter(OutputStream out) { 6 super(out, true); 9 public ConsoleWriter(Writer out) { 10 super(out, true); 13 public void printwon(long value) { 14 String format = "W#,###"; 15 DecimalFormat df = new DecimalFormat(format); 16 print(df.format(value)); 자바입출력 28
11.2.5 PrintStream/PrintWriter 예제 : ConsoleWriter.java( 계속 ) 24 public void printdollar(float value) { 25 String format = "$#,###.00"; 26 DecimalFormat df = new DecimalFormat(format); 27 print(df.format(value)); 35 public void print(double value, int digit) { 36 String format = "#."; 37 for(int i=0; i < digit; i++) { 38 format += "#"; 39 } 40 DecimalFormat df = new DecimalFormat(format); 41 print(df.format(value)); 42 flush(); 자바입출력 29
11.2.5 PrintStream/PrintWriter 예제 : ConsoleWriterTest.java 5 ConsoleWriter out = new ConsoleWriter(System.out); 6 double d = 123.456789; 7 int money = 1234567; 8 9 out.println(d); 10 out.println(d, 2); 11 out.printlnwon(money); 12 out.printlndollar(money); 결과 C:\> java ConsoleWriterTest 123.456789 123.46 W1,234,567 $1,234,567.00 자바입출력 30
11.2.6 BufferedInputStream/BufferedOutputStream BufferedInputStream 바이트입력에서성능을높이기위해서버퍼를사용하는클래스 생성자 BufferedInputStream(InputStream in, int size) BufferedInputStream(InputStream in) BufferedOutputStream 바이트출력에서성능을높이기위해서버퍼를사용하는클래스 생성자 BufferedOutputStream(OutputStream out, int size) BufferedOutputStream(OutputStream out) 자바입출력 31
11.2.7 BufferedReader/BufferedWriter BufferedReader 버퍼를사용하는 Reader 생성자및중요메소드 BufferedReader(Reader in, int sz) BufferedReader(Reader in) String readline() BufferedWriter 버퍼를사용하는 Writer 생성자 BufferedWriter(Writer out, int sz) BufferedWriter(Writer out) 자바입출력 32
11.2.7 BufferedReader/BufferedWriter 예제 : ConfigurationReader.java 28 BufferedReader br = 29 new BufferedReader(new FileReader(file) ); 30 31 while((rl=br.readline())!= null) { 32 rl = rl.trim(); 33 if(rl.charat(0) == comment ) { 34 continue; 35 } else { 36 StringTokenizer st = 37 new StringTokenizer(rl,delm,false); 38 String key = st.nexttoken(); 39 String value = st.nexttoken(); 40 ht.put(key, value); 자바입출력 33
11.2.7 BufferedReader/BufferedWriter 예제 : ConfigurationReader.java( 계속 ) 46 public String getvalue(string name) { 47 return (String)ht.get(name); 결과 48 } C:\> java ConfigurationReader 49 7690 50 public static void main(string args[]) { it.mokpo.ac.kr 51 ConfigurationReader cr = admin@it.mokpo.ac.kr 52 new ConfigurationReader("server.conf"); 53 try { 54 cr.parse(); 55 System.out.println(cr.getValue("port")); 56 System.out.println(cr.getValue("server")); 57 System.out.println(cr.getValue("admin")); 자바입출력 34
11.2.8 DataInputStream/DataOutputStream DataInputStream 데이터타입별로읽을때사용 생성자및중요메소드 DataInputStream(InputStream in) char readchar() double readdouble() int readint() DataOutputStream 데이터타입별로출력 생성자및중요메소드 DataOutputStream(OutputStream out) void writechar(int v) void writeint(int v) 자바입출력 35
11.2.8 DataInputStream/DataOutputStream 예제 : DataIOTest.java 12 public void write() throws IOException { 13 DataOutputStream out = new 14 DataOutputStream(new FileOutputStream(file)); 15 int value[] = Fibonachi.calculate(n); 16 for(int i=0; i <= n; i++) { 17 out.writeint(value[i]); 18 //System.out.println(value[i]); 19 } 20 out.flush(); 21 out.close(); 자바입출력 36
11.2.8 DataInputStream/DataOutputStream 예제 : DataIOTest.java( 계속 ) 24 public void read() throws IOException { 25 DataInputStream in = 26 new DataInputStream(new FileInputStream(file)); 27 int n = in.available()/4; 28 //System.out.println("# of data = " + n); 29 for(int i=0; i < n; i++) { 30 int v = in.readint(); 31 System.out.println("f["+i+"] = " + v); 32 } 33 in.close(); 34 } 자바입출력 37
11.2.9 ObjectInputStream/ObjectOutputStream ObjectInputStream 저장된객체를읽는다. 생성자및중요메소드 ObjectInputStream(InputStream in) Object readobject() ObjectOutputStream 객체를저장한다. 생성자및중요메소드 ObjectOutputStream(OutputStream out) void writeobject(object obj) 자바입출력 38
11.2.9 ObjectInputStream/ObjectOutputStream 예제 : SerializedDate.java 15 public void write(string file) { 16 try { 17 FileOutputStream fout = new FileOutputStream(file); 18 os = new ObjectOutputStream(fout); 19 System.out.println("We save this date.. :"+ date); 20 os.writeobject(date); 21 os.close(); 22 } catch(ioexception e) { 23 e.printstacktrace(); 24 } 25 } 자바입출력 39
11.2.9 ObjectInputStream/ObjectOutputStream 예제 : SerializedDate.java( 계속 ) 27 public void read(string file) { 28 try { 29 FileInputStream fin = new FileInputStream(file); 30 is = new ObjectInputStream(fin); 31 date = (Date)is.readObject(); 32 System.out.println("We gets saved old date.. :"+ date); 33 System.out.println("Current date is.. :"+ new Date()); 34 } catch(ioexception e) { 35 e.printstacktrace(); 36 } catch(classnotfoundexception nfe) { 37 nfe.printstacktrace(); 38 } 자바입출력 40
11.2.10 StringReader/StringWriter StringReader 문자열에서다른 Reader와동일한방법으로데이터를읽은수있는방법을제공 생성자 StringReader(String s) StringWriter 문자열에다른 Writer와동일한방법으로데이터를출력하는방법제공 생성자 StringWriter() StringWriter(int initialsize) 자바입출력 41
11.2.11 RandomAccessFile RandomAccessFile 입출력포인터의위치를자유롭게이동 생성자및중요메소드 RandomAccessFile(String filename, String openmode) void seek(long pos) long length() boolean readboolean() char readchar() double readdouble() float readfloat() int readint() long readlong() 자바입출력 42
11.2.11 RandomAccessFile Record 직원정보를표현하기위한사용자정의클래스 예제 : Record.java 1 public class Record { 2 private String name; 3 private int num; 4 private String part; 5 private String tel; 6 7 public Record(String na, int n, String p, String t) { 8 name = na; 9 num = n; 10 part = p; 11 tel = t; 자바입출력 43
11.2.11 RandomAccessFile DataTable Record 클래스를 RandomAccessFile을이용해서파일에저장및읽기위한사용자정의클래스 Record 객체의크기 : 42 바이트 RandomAccessFile의첫4 바이트는 Record 객체의개수를의미 예제 : DataTable.java 9 public DataTable(String file) { 10 try { 11 dbfile = new RandomAccessFile(file, "rw"); 12 if(dbfile.length() ==0) { 13 rc = 0; 14 } else { 15 rc = dbfile.readint(); 자바입출력 44
11.2.11 RandomAccessFile 예제 : DataTable.java( 계속 ) 39 public Record readrec(int index) { 44 dbfile.seek(index * recordlength + recordoffset); 45 for(int i = 0; i < 5; i++) { 46 name += dbfile.readchar(); 49 num = dbfile.readint(); 50 51 for(int i = 0; i < 6;i++) { 52 part += dbfile.readchar(); 61 return (new Record(name, num, part, tel)); 자바입출력 45
11.2.11 RandomAccessFile 예제 : DataTable.java( 계속 ) 88 public void writerec(string name, int num, String part, 89 String tel, int index) { 93 dbfile.seek(index * recordlength + recordoffset); 94 len = name.length(); 95 for(int i =0; i < 5; i++) { 96 dbfile.writechar((i < len? name.charat(i):' ')); 99 dbfile.writeint(num); 111 dbfile.seek(0); 112 dbfile.writeint(rc); 자바입출력 46
11.2.11 RandomAccessFile CMD 작업명형어를기술하기위한사용자정의열거형 예제 : CMD.java 1 public enum CMD { 2 NONE, ADD, TOTAL, SEARCH, REMOVE, ESC; 3 } 자바입출력 47
예제 : EmployeeDB.java......... 11.2.11 RandomAccessFile 18 action = CMD.NONE; 27 table = new DataTable(dbFile); 121 private void add() { 135 namestring = name.gettext().trim(); 136 num = number.gettext().trim(); 137 part = dept.gettext().trim(); 138 tel = phone.gettext().trim(); 139 140 display.settext(namestring + num + part + tel); 141 table.add(namestring, Integer.parseInt(num), part, tel); 142 display.append(" n 등록을성공적으로마쳤습니다."); 자바입출력 48
11.2.11 RandomAccessFile 예제 : EmployeeDB.java( 계속 ) 154 private void total() { 155 action = CMD.TOTAL; 156 int len = table.length(); 157 display.settext(" n 검색건수 : 총 " + len + " 건 n"); 158 display.append(" n==============================="); 159 display.append(" n 순번 t성명 t사번 t부서 t전화 "); 160 display.append(" n============================== n"); 161 if(len == 0) { 162 display.append(" 등록된자료가없습니다. n"); 163 return; 164 } 165 for(int i = 0; i < len; i++) { 166 Record rec = table.readrec(i); 167 print(i, rec.getname(), rec.getnum(), 168 rec.getpart(), rec.gettel()); 자바입출력 49
11.2.11 RandomAccessFile 예제 : EmployeeDB.java( 계속 ) 181 private void search() { 193 int len = table.length(); 202 for(int i = 0; i < len ; i++) { 203 rec = table.readrec(i); 204 if(namestring.equals(table.readname(i, 205 namestring.length()))) { 206 found = true; 207 print(i, rec.getname(), rec.getnum(), 208 rec.getpart(), rec.gettel()); 209 } 210 } 211 if (!found) { 212 display.settext(" 조회하신직원이없습니다."); 자바입출력 50
11.2.11 RandomAccessFile EmployeeDB 결과 자바입출력 51
11.2.12 StreamTokenizer StreamTokenizer 입력스트림의내용을토큰 (token) 으로잘라서리턴하는클래스 입력스트림의내용을공백문자, 알파벳, 숫자, 문자열, 주석이라는 5개종류의토큰으로파싱할수있다. 생성자, 멤버필드, 메소드 StreamTokenizer(Reader r) double nval - 현재토큰이숫자인경우에현재토큰의숫자값 String sval - 현재토큰이단어인경우에현재토큰의문자열 static int TT_EOF - 파일의끝 static int TT_EOL - 현재라인의끝 static int TT_NUMBER - 읽은토큰이숫자임 static int TT_WORD - 읽은토큰이단어임 int ttype - nexttoken() 자바입출력 52
11.2.12 StreamTokenizer StreamTokenizer 클래스의상태변화 상태입력액션새로운상태 Idle 단어문자 입력스트림에돌려준다. Accumulate ordinary 문자 문자를리턴한다 Idle 공백문자문자를소비한다 Idle accumulate 단어문자현재단어에추가한다. Accumulate ordinary 문자 현재단어를리턴하고, 현재문자는입력스트림에돌려준다. Idle 공백문자현재단어를리턴하고, 현재문자는입력스트림에돌려준다. Idle 자바입출력 53
11.2.13 파일 (File) File 파일과디렉토리를표현하기위해서사용 File 클래스가할수있는일 디렉토리내용을알아본다. 파일속성을알아보거나설정한다. 파일의이름을변경하거나삭제한다. 생성자및메소드 File(File parent, String child) File(String pathname) String getname() long length() File[] listfiles() 자바입출력 54
11.2.13 파일 (File) FilenameFilter 파일이름을필터링해서원하는형태의파일이름을갖는파일들만선택하도록지원한다. 메소드 boolean accept(file dir, String name) 자바입출력 55
11.2.13 파일 (File) 예제 : ExtensionFilter.java 3 public class ExtensionFilter implements FilenameFilter { 4 protected String ext; 5 6 public ExtensionFilter(String ext) { 7 this.ext = ext; 8 } 9 10 public boolean accept(file dir, String name) { 11 if(name.endswith(ext)) { 12 return true; 13 } else { 14 return false; 자바입출력 56
11.2.13 파일 (File) 예제 : Dir.java 13 File files[] = null; 14 if(filter!= null) { 15 files = d.listfiles(filter); 16 } else { 17 files = d.listfiles(); 18 } 19 if(files == null) { 20 System.err.println(d.getName() + " 디렉터리가없습니다."); 21 return; 22 } 23 for(int i=0; i < files.length; i++) { 24 System.out.print(files[i].getName()); 25 System.out.print(" t t"); 26 System.out.println(files[i].length()); 자바입출력 57
11.3 정규식 (regular expression) 정규식표기법 자바입출력 58
11.3 정규식 (regular expression) Pattern 정규식을표현하기위해서사용되는클래스 메소드들 static Pattern compile(string regex) static Pattern compile(string regex, int flags) Matcher matcher(charsequence input) 플래그들 static int CASE_INSENSITIVE static int COMMENTS static int DOTALL static int MULTILINE static int UNICODE_CASE static int UNIX_LINES 자바입출력 59
11.3 정규식 (regular expression) 예제 : DataSpliter.java 6 public DataSpliter(String reg) { 7 pat = Pattern.compile(reg); 8 } 9 10 public String[] getvalue(string data) { 11 return pat.split(data); 12 } 13 14 public static void main(string args[]) { 15 String data = " 홍길동, 123-4567, hong@some.com"; 16 DataSpliter ds = new DataSpliter("[, s]+"); 17 String value[] = ds.getvalue(data); 18 for(int i=0; i < value.length; i++) { 19 System.out.println(value[i]); 자바입출력 60
11.3 정규식 (regular expression) Matcher 클래스 문자들을패턴에매치시키는역할을함. 메소드들 boolean matches() boolean find() Matcher appendreplacement(stringbuffer sb, String replacement) StringBuffer appendtail(stringbuffer sb) 자바입출력 61
11.3 정규식 (regular expression) 예제 : ReplaceTest.java 5 String data = " 홍길동, 123-4567, hong@some.com"; 6 Pattern pat = Pattern.compile("[, s]+"); 7 Matcher m = pat.matcher(data); 8 StringBuffer sb = new StringBuffer(); 9 boolean result = m.find(); 10 while(result == true) { 11 m.appendreplacement(sb, ":"); 12 result = m.find(); 13 } 14 m.appendtail(sb); 15 System.out.println(data + " =>"); 16 System.out.println(sb.toString()); 자바입출력 62
11.4 새로운 I/O (NIO) NIO 버퍼관리와네트워크등에서성능을향상시키기위한기능들을제공 클래스상속관계 자바입출력 63