목차

1. 자바에서의 입출력

1.1 입출력이란?

1.2 스트림

1.3 바이트 기반 스트림 - InputStream, OutputStream

입력스트림 출력스트림 입출력 대상의 종료
FileInputstream FileOutputstream 파일
ByteArrayInputStream ByteArrayOutputStream 메모리(byte)배열
PipedInputStream PipedOutputStream 프로세스(프로세스간의 통신)
AudioInputStream AudioOutputStream 오디오 장치
입력스트림 출력스트림
abstract int read() abstract void write(int b)
int read(byte[] b) Void write(byte[] b)
int read(byte[] b, int off, int len Void write(byte[] b, int off, int len

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

import java.io.*;
import java.util.Arrays;
 
class IOEx1 
{
	public static void main(String[] args) 
	{
		byte[] inSrc = {0,1,2,3,4,5,6,7,8,9};
		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);	// void write(int b)
		}
 
		outSrc = output.toByteArray();
 
		System.out.println("Input Source  :" + Arrays.toString(inSrc));
		System.out.println("Output Source :" + Arrays.toString(outSrc));
	}
}
import java.io.*;
import java.util.Arrays;
 
class IOEx2
{
	public static void main(String[] args) 
	{
		byte[] inSrc = {0,1,2,3,4,5,6,7,8,9};
		byte[] outSrc = null;
 
		byte[] temp = new byte[10];
 
		ByteArrayInputStream input = null;
		ByteArrayOutputStream output = null;
 
		input = new ByteArrayInputStream(inSrc);
		output = new ByteArrayOutputStream();
 
		input.read(temp,0,temp.length); // 읽어 온 데이터를 배열 temp에 담는다.
		output.write(temp,5, 5);	    // temp[5]부터 5개의 데이터를 write한다.
 
		outSrc = output.toByteArray();
 
		System.out.println("Input Source  :" + Arrays.toString(inSrc));
		System.out.println("temp              :" + Arrays.toString(temp));
		System.out.println("Output Source :" + Arrays.toString(outSrc));
 
	}
}
import java.io.*;
import java.util.Arrays;
 
class IOEx3 {
	public static void main(String[] args) {
		byte[] inSrc = {0,1,2,3,4,5,6,7,8,9};
		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, 0, len); // 읽어 온 만큼만 write한다.
			}
		} catch(IOException e) {}
		*/
		outSrc = output.toByteArray();
 
		System.out.println("Input Source  :" + Arrays.toString(inSrc));
		System.out.println("temp          :" + Arrays.toString(temp));
		System.out.println("Output Source :" + Arrays.toString(outSrc));
	}
}

2.3 FileInputStream과 FileOutputStream

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);
		}
	}
}
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);	 // void write(int b)
			}
 
			fis.close();
			fos.close();
		} catch (IOException e) {
			e.printStackTrace();		
		}
	}
}

3.바이트기반의 보조스트림

3.1 FileInputStream과 FilterOupputStream

3.2 BufferInputStream과 BufferOutputStream

]
 import java.io.*;
 
class BufferedOutputStreamEx1 {
	public static void main(String args[]) {
		try {
		     FileOutputStream fos = new FileOutputStream("123.txt");
 
			 // BufferedOutputStream의 버퍼 크기를 5로 한다.
	         BufferedOutputStream bos = new BufferedOutputStream(fos, 5);
 
			 // 파일 123.txt에  1 부터 9까지 출력한다.
		     for(int i='1'; i <= '9'; i++) {
			     bos.write(i);
		     }
 
		     fos.close();
		} catch (IOException e) {
		     e.printStackTrace();		
		}
	}
}

3.3 DataInputStream과 DataOutputStream

 

3.4 SequenceInputStream

 

4.문자기반 스트림

4.1 Reader와 Writer

4.2 FileReader와 FileWriter

import java.io.*;
 
class FileReaderEx1 {
	public static void main(String args[]) {
		try {
			String fileName = "test.txt";
			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

5.문자기반의 보조스트림

5.1 BufferedReader와 BufferedWriter