일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ABSOLUTE
- where
- 정보처리기사
- transform
- call by refelrence
- position
- 산업기사
- Encoding
- datasourceexplorer
- call by value
- method
- SQL
- 스마트에디터
- 기사
- fixed
- MySQL
- 정보처리 산업기사
- codepage
- text-shadow
- static
- UTF-8
- 정보처리
- Spring
- transition
- box-sizing
- relative
- I/O
- 이미지확대
- STREAM
- Today
- Total
a battle with myself
[java] 입출력(I/O) Stream(file/buffered) 본문
사용빈도가 높은 Stream
byte Stream(1byte 씩 읽거나 씀)
(2진,바이너리 형태의 파일을 읽거나 쓸때 사용)
InputStream // OutputStream
FileInputStream FileOutputStream
ObjectInputStream ObjectOutputStream
오브젝트 스트림에 객체를 담아주기 위해선 객체에 Serializable 인터페이스를 구현하여 객체 직렬화를 사용해줘야한다.
중간단계
InputStreamReader
OutputStreamWriter
이 두개의 스트림은 1byte형태의 stream 2바이트 형태로 읽고 쓸 수 있게 해준다.
character stream(2byte 씩 읽거나 씀)
(text 형태의 파일을 읽거나 쓸때 사용)
Reader // Writer
FileReader // FileWriter
BufferedReader // BufferedWriter
// PrintWriter(버터레드라이터는 사용후 남은 버퍼를 날려주기 위해 flush() 를 꼭 사용
해줘야하나 프린터 라이터는 오토 플러쉬를 지원 해준다)
---------------------------------------------------------------------------------------------------------------------------------
//5mb 크기의 text 파일 을 읽어 들일때의 속도 비교
public class Stream_test{ int temp; String path = "d:a.txt"; // 5mb 크기의 text 파일 public void testStream(){ try{ FileInputStream fs = new FileInputStream(path); long before = System.currentTimeMillis(); while((temp=fs.read())!= -1){ System.out.println((char)temp); } long amount = System.currentTimeMillis()-before; System.out.println("소요된 시간은 : " + amount); fs.close(); }catch(Exception e){ e.printStackTrace(); } } public void testReader(){ try{ FileReader fr = new FileReader(path); long before = System.currentTimeMillis(); while((temp=fr.read())!= -1){ System.out.println((char)temp); } long amount = System.currentTimeMillis()-before; System.out.println("소요된 시간은 : " + amount); fr.close(); }catch(Exception e){ e.printStackTrace(); } public static void main(String []args){ Stream_test st = new Stream_test(); st.testStream(); // 약 10초 소요(9772) st.testReader(); / 약 5초 소요(5129) // text 파일을 읽어 올시 2바이트 읽는 리더가 빠르다. } }
---------------------------------------------------------------------------------------------------------------------------------
//file 복사
public class Stream_test{ int temp; String path = "d:a.txt"; // 5mb 크기의 text 파일 String newPath = "d:copya.txt"; // 이동 복사 경로 public void testCopy(){ try{ FileReader fs = new FileReader(path); FileWriter fw = new FileWriter(newPath); long before = System.currentTimeMillis(); while((temp=fs.read())!= -1){ fw.write(temp); } long amount = System.currentTimeMillis()-before; System.out.println("소요된 시간은 : " + amount); fr.close(); fw.close(); }catch(Exception e){ e.printStackTrace(); } } public static void main(String []args){ Stream_test st = new Stream_test(); st.testCopy() // 약 3초 소요(3172) //출력문이 없기 때문에 시간이 빠름 } }
---------------------------------------------------------------------------------------------------------------------------------
// 한줄씩 읽거나 쓰는 BufferdReader 와 BufferedWriter
public class Stream_test{ String temp; String path = "d:a.txt"; // 5mb 크기의 text 파일 String newPath = "d:copya.txt"; // 이동 복사 경로 public void testBuffered(){ try{ BufferedReader br = new BufferedReader(new FileReader(path)); BufferedWriter bw = new BufferedWriter(new FileWriter(newPath)); long before = System.currentTimeMillis(); while((temp=br.readLine()) != null){ bw.write(temp+"\r\n"); } bw.flush(); long amount = System.currentTimeMillis()-before; System.out.println("소요된 시간은 : " + amount); br.close(); bw.close(); }catch(Exception e){ e.printStackTrace(); } } public static void main(String []args){ Stream_test st = new Stream_test(); st.testBuffered(); // 일반적인 copy 보다 빠름 한줄씩 읽어온다. } }
---------------------------------------------------------------------------------------------------------------------------------
//try문 안에서 리더 구현
public class Stream_test{ String temp; String path = "d:a.txt"; // 5mb 크기의 text 파일 String newPath = "d:copya.txt//이동 복사 경로 public void testBuffered(){ try(BufferedReader br = new BufferedReader(new FileReader(path)); BufferedWriter bw = new BufferedWriter(new FileWriter(newPath))){ long before = System.currentTimeMillis(); while((temp=br.readLine()) != null){ bw.write(temp+"\r\n"); } long amount = System.currentTimeMillis()-before; System.out.println("소요된 시간은 : " + amount); }catch(Exception e){ e.printStackTrace(); } } public static void main(String []args){ Stream_test st = new Stream_test(); st.testBuffered(); // try( 안에 구현시 close()를 해주지 않아도 된다. ) } }
'java' 카테고리의 다른 글
[java] window10 환경 변수 설정 / java 경로 (1) | 2016.07.14 |
---|---|
[java] call by reference/call by value (0) | 2016.06.13 |
[java] eclipse 실행시 java 경로를 못찾을 경우 (2) | 2016.06.13 |