스트림 (Stream)
: 스트림이란 데이터가 이동하는 통로이다.
- 운영체제에 의해 생성되는 가상의 연결고리이다.
- 큐(Queue)와 같은 선입선출(FIFO) 형태로 데이터가 전송
I/O Stream
- 단방향 통신을 지원하는 기능
- 서로 통신을 위한 Input Stream / Output Stream 2개가 필요
바이트 입출력 스트림
: 1byte 단위 - 영상, 음성, 영문자의 binary 데이터 처리
InputStream
바이트 단위 입력 스트림 최상위 추상 클래스
FileInputStream : 파일에서 바이트 단위로 자료를 읽음.
FIlterInputStream : 기반 스트림에서 자료를 읽을 때 추가 기능을 제공하는 보조 스트림 상위 클래스
OutputStream
바이트 단위 출력 스트림 최상위 추상 클래스
FileOutputStream : 파일에서 바이트 단위로 자료를 씀.
FileOutputStream : 기반 스트림에서 자료를 읽을 때 추가 기능을 제공하는 보조 스트림의 상위 클래스
InputStream 클래스는 read() 메소드, OutputStream 클래스는 write() 메소드
보조 스트림
- 실제 읽고 쓰는 스트림이 아닌 보조 기능을 제공하는 스트림
- FilterInputStream과 FilterOutputStream이 보조 스트림의 상위 클래스들
- 생성자의 매개변수로 또 다른 스트림(기반 스트림이나 보조 스트림)을 가짐
예제
데스크탑 로컬에 파일 생성해서 파일에 문자열, 값 저장하는 예제
Stream_fileOutputStream
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 31 32 33 | package ch01; import java.io.FileOutputStream; import java.io.IOException; public class Stream_FileOutputStream { public static void main(String[] args) { FileOutputStream fos = null; try { // FileOutputStream으로 파일 생성 // 바이트 단위 // FileOutputStream 파일을 생성할 곳을 지정 fos = new FileOutputStream("c:/tmp/output.txt"); fos.write(100); // d fos.write(99); // c } catch (IOException e) { System.out.println("파일 생성 안됨"); e.printStackTrace(); } finally { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } // end of main } // end of class | cs |
Stream_FileOutputStream2
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 31 32 33 34 35 36 37 38 39 40 | package ch01; import java.io.FileOutputStream; import java.io.IOException; public class Stream_FileOutputStream2 { public static void main(String[] args) { FileOutputStream fos = null; try { // FileOutputStream으로 파일 생성 // 바이트 기반 // A ~ Z까지 출력하기 // 바이트 기반이기 때문에 A~Z까지 찍기 위해 26개 배열 생성 byte[] b = new byte[26]; // 65 : A, 66 : B, ... byte data = 65; fos = new FileOutputStream("c:/tmp/output2.txt"); for (int i = 0; i < b.length; i++) { fos.write(data); data++; } } catch (IOException e) { e.printStackTrace(); } finally { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } // end of main } // end of class | cs |
Stream_FileOutputStream3
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 31 32 | package ch01; import java.io.FileOutputStream; import java.io.IOException; public class Stream_FileOutputStream3 { public static void main(String[] args) { FileOutputStream fos = null; try { fos = new FileOutputStream("c:/tmp/output3.txt"); // 넣고 싶은 문자열을 생성하여 byte[] 배열에 .getBytes()메서드 사용하기 String msg = "hello world"; byte[] b = msg.getBytes(); for (int i = 0; i < b.length; i++) { fos.write(b[i]); } } catch (Exception e) { e.printStackTrace(); } finally { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } | cs |
Stream_FileReader_FileWriter
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 31 32 33 34 35 36 37 38 | package ch01; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Stream_FileReader_FileWriter { public static void main(String[] args) { FileReader fr = null; FileWriter fw = null; try { // 읽어올 파일을 생성을 안 하고 실행해서 오류 났었음. fr = new FileReader("c:/tmp/readerex.txt"); fw = new FileWriter("c:/tmp/writerex.txt"); int i; fw.write("hihihihi \n"); while ((i = fr.read()) != -1) { fw.write(i + "\n"); } fw.write("byebyebye \n"); } catch (Exception e) { e.printStackTrace(); } finally { try { fr.close(); fw.flush(); fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } | cs |
Stream_FileReader
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 | package ch01; import java.io.FileReader; // FileReader로 텍스트 읽어오기. // 문자 단위로 읽어옴. public class Stream_FileReader { public static void main(String[] args) { FileReader fr = null; try { // c드라이버 tmp폴더의 a텍스트 파일에 적은 내용을 읽어옴. fr = new FileReader("c:\\tmp\\a.txt"); int i; // i에 읽어온 내용 저장하고 파일 끝까지 읽음(!= -1) while ((i = fr.read()) != -1) { System.out.print((char) i); } } catch (Exception e) { System.out.println("입출력 오류났어"); e.printStackTrace(); } } // end of main } // end of class | cs |
Stream_FileWriter
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 31 32 33 34 35 36 | package ch01; import java.io.FileWriter; import java.io.IOException; // FileWriter // 문자 기반 public class Stream_FileWriter { public static void main(String[] args) { FileWriter fw = null; try { // String, char 가능 fw = new FileWriter("c:/tmp/writer1.txt"); String msg = "asfdasdf"; char[] buf = { 'H', 'I' }; fw.write('A'); fw.write(msg); fw.write(buf); } catch (IOException e) { System.out.println("출력 안됨"); e.printStackTrace(); } finally { try { // close() 안하면 출력 안됨. (close 안해서 출력 안됐었음.) fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } | cs |
BufferedStream1
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 31 32 33 34 35 36 37 38 39 40 | package ch01; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class BufferedStream1 { public static void main(String[] args) { // BufferedStream 보조 스트림 활용 FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("c:/tmp/a.txt"); fos = new FileOutputStream("c:/tmp/buffered.txt"); BufferedInputStream bis = new BufferedInputStream(fis); BufferedOutputStream bos = new BufferedOutputStream(fos); int i; while ((i = bis.read()) != -1) { bos.write(i); } } catch (Exception e) { e.printStackTrace(); }finally { try { fis.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } | cs |
BufferedStream2
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 31 32 33 34 | package ch01; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; public class BufferedStream2 { public static void main(String[] args) { // BufferedInputStream BufferedInputStream bis = null; try { // 보조기반스트림을 먼저 선언해서 안에 FileInputStream 넣고 사용하기 bis = new BufferedInputStream(new FileInputStream("c:/tmp/test.txt")); int i; while ((i = bis.read()) != -1) { System.out.print(i + " "); } } catch (Exception e) { e.printStackTrace(); } finally { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } } } | cs |
BufferedStream3
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 31 32 33 | package ch01; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class BufferedStream3 { public static void main(String[] args) { // BufferedWriter, BufferedReader BufferedWriter bw = null; try { // bufferdWriter를 통해 bw = new BufferedWriter(new FileWriter("c:/tmp/asdf.txt")); String str = "asdfasdfasdf"; bw.write(str); } catch (IOException e) { e.printStackTrace(); } finally { try { bw.flush(); bw.close(); } catch (IOException e) { e.printStackTrace(); } } } } | cs |
BufferedStream4
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 | package ch01; import java.io.BufferedReader; import java.io.FileReader; public class BufferedStream4 { public static void main(String[] args) { BufferedReader br = null; try { // BufferedReader로 파일 읽어오기. // String으로 받아서 readLine()하고 != null 해야 한글 출력됨! br = new BufferedReader(new FileReader("c:/tmp/asdf.txt")); String str; while ((str = br.readLine()) != null) { System.out.println(str); } } catch (Exception e) { e.printStackTrace(); } } } | cs |
'프로그래밍 > 개인 복습 공부' 카테고리의 다른 글
Java_단방향 통신 (0) | 2023.04.17 |
---|