문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
study:java:javachobo:ch14 [2010/03/30 01:09] ziro0914 |
study:java:javachobo:ch14 [2010/04/03 17:31] (현재) gauryan |
||
---|---|---|---|
줄 1: | 줄 1: | ||
====== 1. 자바에서의 입출력 ====== | ====== 1. 자바에서의 입출력 ====== | ||
===== 1.1 입출력이란? | ===== 1.1 입출력이란? | ||
- | * I/O란 input과 ouput의 약자로 입력과 출력, 간단히 줄여서 입출력이라고 한다. | + | |
- | * 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것을 말한다. | + | *입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것을 말한다. |
===== 1.2 스트림 ===== | ===== 1.2 스트림 ===== | ||
- | * 자바에서 입출력을 수행하려면, | + | |
- | * 스트림은 연속적인 데이터의 흐름을 물에 비유해서 붙여진 이름인데 여러가지로 유사한 점이 많다. 물이 한쪽 방향으로만 흐르는 것과 같이 스트림은 단방향통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다. | + | *스트림은 연속적인 데이터의 흐름을 물에 비유해서 붙여진 이름인데 여러가지로 유사한 점이 많다. 물이 한쪽 방향으로만 흐르는 것과 같이 스트림은 단방향통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다. |
- | * 그래서 입력과 출력을 동시에 수행하려면 입력을 위한 입력스트림(input stream)과 출력을 위한 출력스트림(ouput stream), 모두 2개의 스트림이 필요하다. | + | *그래서 입력과 출력을 동시에 수행하려면 입력을 위한 입력스트림(input stream)과 출력을 위한 출력스트림(ouput stream), 모두 2개의 스트림이 필요하다. |
- | * 스트림은 먼저 보낸 데이터를 먼저 받게 되어 있으며 중간에 건너뜀 없이 연속적으로 데이터를 주고받는다. 큐(queue)와 같은 FIFO(First In First Out)구조로 되어 있다고 생각하면 이해하기 쉬울 것이다. | + | *스트림은 먼저 보낸 데이터를 먼저 받게 되어 있으며 중간에 건너뜀 없이 연속적으로 데이터를 주고받는다. 큐(queue)와 같은 FIFO(First In First Out)구조로 되어 있다고 생각하면 이해하기 쉬울 것이다. |
===== 1.3 바이트 기반 스트림 - InputStream, | ===== 1.3 바이트 기반 스트림 - InputStream, | ||
줄 17: | 줄 17: | ||
| **Audio**InputStream | | **Audio**InputStream | ||
- | * 이들은 모두 | + | |
^ 입력스트림 | ^ 입력스트림 | ||
- | | **File**Inputstream | + | | abstract int read() |
- | | **ByteArray**InputStream | + | | int read(byte[] b) | Void write(byte[] b) | |
- | | **Piped**InputStream | + | | int read(byte[] b, int off, int len | Void write(byte[] b, int off, int len | |
- | | **Audio**InputStream | + | |
- | + | | |
+ | |||
+ | ===== 1.4 보조스티림 ===== | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ===== 1.5 문자기반 스트림 - Reader. Writer ===== | ||
+ | | ||
+ | | ||
+ | |||
+ | ^ 바이트 기반 스트림 ^ 문자 기반 스트임 ^ | ||
+ | | FileInputStream | FileReader | ||
+ | | FileOutputStream | FileWriter | | ||
+ | | ByteArrayStream | CharArrayStream | | ||
+ | | ByteArrayOupputStream | CharArrayWriter | | ||
+ | | PipedInputStream | PipedReader | | ||
+ | | PipedOutputStream | PipedWriter | | ||
+ | | StringingBufferInputStream | StringReader | | ||
+ | | StringBufferOutputStream | StringWriter | | ||
+ | |||
+ | ====== 2. 바이트 기반 스트림 ====== | ||
+ | ===== 2.2 ByteArrayInputStream과 ByteArrayOupputStream ===== | ||
+ | | ||
+ | |||
+ | <code java> | ||
+ | import java.io.*; | ||
+ | import java.util.Arrays; | ||
+ | |||
+ | class IOEx1 | ||
+ | { | ||
+ | public static void main(String[] args) | ||
+ | { | ||
+ | byte[] inSrc = {0, | ||
+ | byte[] outSrc = null; | ||
+ | |||
+ | ByteArrayInputStream input = null; | ||
+ | ByteArrayOutputStream output = null; | ||
+ | |||
+ | input = new ByteArrayInputStream(inSrc); | ||
+ | output = new ByteArrayOutputStream(); | ||
+ | |||
+ | int data = 0; | ||
+ | |||
+ | while((data = input.read())!=-1) { | ||
+ | output.write(data); | ||
+ | } | ||
+ | |||
+ | outSrc = output.toByteArray(); | ||
+ | |||
+ | System.out.println(" | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | <code java> | ||
+ | import java.io.*; | ||
+ | import java.util.Arrays; | ||
+ | |||
+ | class IOEx2 | ||
+ | { | ||
+ | public static void main(String[] args) | ||
+ | { | ||
+ | byte[] inSrc = {0, | ||
+ | byte[] outSrc = null; | ||
+ | |||
+ | byte[] temp = new byte[10]; | ||
+ | |||
+ | ByteArrayInputStream input = null; | ||
+ | ByteArrayOutputStream output = null; | ||
+ | |||
+ | input = new ByteArrayInputStream(inSrc); | ||
+ | output = new ByteArrayOutputStream(); | ||
+ | |||
+ | input.read(temp, | ||
+ | output.write(temp, | ||
+ | |||
+ | outSrc = output.toByteArray(); | ||
+ | |||
+ | System.out.println(" | ||
+ | System.out.println(" | ||
+ | System.out.println(" | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | | ||
+ | <code java> | ||
+ | import java.io.*; | ||
+ | import java.util.Arrays; | ||
+ | |||
+ | class IOEx3 { | ||
+ | public static void main(String[] args) { | ||
+ | byte[] inSrc = {0, | ||
+ | byte[] outSrc = null; | ||
+ | |||
+ | byte[] temp = new byte[4]; // 이전 예제와 배열의 크기가 다르다. | ||
+ | |||
+ | ByteArrayInputStream input = null; | ||
+ | ByteArrayOutputStream output = null; | ||
+ | |||
+ | input = new ByteArrayInputStream(inSrc); | ||
+ | output = new ByteArrayOutputStream(); | ||
+ | |||
+ | try { | ||
+ | while(input.available() > 0) { | ||
+ | input.read(temp); | ||
+ | output.write(temp); | ||
+ | } | ||
+ | } catch(IOException e) {} | ||
+ | |||
+ | /* | ||
+ | try { | ||
+ | while(input.available() > 0) { | ||
+ | int len = input.read(temp); | ||
+ | output.write(temp, | ||
+ | } | ||
+ | } catch(IOException e) {} | ||
+ | */ | ||
+ | outSrc = output.toByteArray(); | ||
+ | |||
+ | System.out.println(" | ||
+ | System.out.println(" | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | | ||
+ | |||
+ | ===== 2.3 FileInputStream과 FileOutputStream ===== | ||
+ | | ||
+ | <code java> | ||
+ | import java.io.*; | ||
+ | |||
+ | class FileViewer { | ||
+ | public static void main(String args[]) throws IOException{ | ||
+ | FileInputStream fis = new FileInputStream(args[0]); | ||
+ | int data =0; | ||
+ | while((data=fis.read())!=-1) { | ||
+ | char c = (char)data; | ||
+ | System.out.print(c); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | import java.io.*; | ||
+ | |||
+ | class FileCopy { | ||
+ | public static void main(String args[]) { | ||
+ | try { | ||
+ | FileInputStream fis = new FileInputStream(args[0]); | ||
+ | FileOutputStream fos = new FileOutputStream(args[1]); | ||
+ | |||
+ | int data =0; | ||
+ | |||
+ | while((data=fis.read())!=-1) { | ||
+ | fos.write(data); | ||
+ | } | ||
+ | |||
+ | fis.close(); | ||
+ | fos.close(); | ||
+ | } catch (IOException e) { | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ====== 3.바이트기반의 보조스트림 ====== | ||
+ | ===== 3.1 FileInputStream과 FilterOupputStream ===== | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ===== 3.2 BufferInputStream과 BufferOutputStream ===== | ||
+ | | ||
+ | | ||
+ | * 버퍼의 크기를 변경해가면서 테스트하면 최적의 버퍼크기를 알아낼수 있다. | ||
+ | <code java>] | ||
+ | | ||
+ | |||
+ | class BufferedOutputStreamEx1 { | ||
+ | public static void main(String args[]) { | ||
+ | try { | ||
+ | | ||
+ | |||
+ | // BufferedOutputStream의 버퍼 크기를 5로 한다. | ||
+ | | ||
+ | |||
+ | // 파일 123.txt에 | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | } catch (IOException e) { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== 3.3 DataInputStream과 DataOutputStream ===== | ||
+ | | ||
+ | | ||
+ | <code java> | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== 3.4 SequenceInputStream ===== | ||
+ | | ||
+ | <code java> | ||
+ | |||
+ | </ | ||
+ | ====== 4.문자기반 스트림 ====== | ||
+ | ===== 4.1 Reader와 Writer ===== | ||
+ | | ||
+ | | ||
+ | ===== 4.2 FileReader와 FileWriter ===== | ||
+ | | ||
+ | <code java> | ||
+ | import java.io.*; | ||
+ | |||
+ | class FileReaderEx1 { | ||
+ | public static void main(String args[]) { | ||
+ | try { | ||
+ | String fileName = " | ||
+ | FileInputStream fis = new FileInputStream(fileName); | ||
+ | FileReader fr = new FileReader(fileName); | ||
+ | |||
+ | int data =0; | ||
+ | // FileInputStream을 이용해서 파일내용을 읽어 화면에 출력한다. | ||
+ | while((data=fis.read())!=-1) { | ||
+ | System.out.print((char)data); | ||
+ | } | ||
+ | System.out.println(); | ||
+ | fis.close(); | ||
+ | |||
+ | // FileReader를 이용해서 파일내용을 읽어 화면에 출력한다. | ||
+ | while((data=fr.read())!=-1) { | ||
+ | System.out.print((char)data); | ||
+ | } | ||
+ | System.out.println(); | ||
+ | fr.close(); | ||
+ | |||
+ | } catch (IOException e) { | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | } // main | ||
+ | } | ||
+ | </ | ||
+ | ===== 4.4 StringReader와 StringWriter ===== | ||
+ | *CharArrayReader, | ||
+ | *StringWriter에 출력되는 데이터는 내부의 StringBuffer에 저장된다. | ||
+ | |||
+ | |||
+ | ====== 5.문자기반의 보조스트림 ====== | ||
+ | ===== 5.1 BufferedReader와 BufferedWriter ===== | ||
+ | *입출력 효율을 높이기 위해 버퍼(char[])를 사용하는 보조스트림 | ||
+ | *라인(line)단위의 입출력이 편리하다. | ||
+ | <code java> | ||
+ | </ |