전체 글 101

문자 스트림 - InputStreamReader과 OutputStreamWriter

InputStreamReader와 OutputStreamWriter InputStreamReader는 Reader를, OutputStreamWriter는 Writer를 상속받는다. 즉, 문자단위 입력에 필요한 클래스다. 하지만 두 클래스는 각각 InpustStream과 OutputStream을 생성자에서 받아들인다. IO 클래스에서 중요한 것은 생성자이다. 생성자에 전달한 인자가 무엇이냐에 따라서 읽어 들여야 할 대상과 써야 할 대상이 달라진다. 즉, InputStreamReader는 바이트 단위로 읽어 들이는 InputStream을 통해 데이터를 읽어 들여 문자 단위로 읽어 들이는 방식으로 변형한다. 그리고 OutputStreamWriter는 바이트 단위로 쓰는 OutputStream을 이용해서 문자 ..

문자 스트림 - Reader와 Writer

Reader와 Writer Reader와 Writer는 문자 단위 입출력 스트림에서 가장 기본이 되는 클래스로써 모두 추상 클래스다. 즉, Reader와 Writer는 객체화가 될 수 없다. Reader와 Writer는 각각 바이트 단위 입출력 스트림인 InpustStream, OutputStream과 사용법이 거의 비슷하다. 틀린 점이 있다면, 바이트 단위 입출력 스트림은 바이트나 바이트의 배열을 읽고 쓰는 것에 비해서, 문자 단위 입출력 스트림은 문자나 문자 배열을 읽고 쓴다. Reader 클래스의 중요 메소드 메소드 설명 abstract void close() throws IOException 문자 입력 스트림을 닫는다. void mark(int limit) throws IOException 문자 ..

바이트 기반 스트림 - 데이타 전달(PipedInputStream, PipedOutputStream)

PipedInputStream과 PipedOutputStream을 이용한 데이타 전달 import java.io.*; class ReadThread extends Thread{ InputStream pi = null; OutputStream po = null; ReadThread( InputStream pi, OutputStream po) { this.pi = pi; this.po = po; } public void run() { int ch; int i; try { for(;;) { i = pi.read(); if (i == -1) { return; } po.write(i); } } catch (Exception e) { } } } class SystemStream { public static void..

바이트 기반 스트림 - PipedInputStream과 PipedOutputStream

PipedInputStream과 PipedOutputStream 유닉스 시스템에 자주 사용하는 기호 중에서 파이프 기호('|')가 있다 유닉스에서 ls(도스의 dir명령)를 실행하면 파일의 목록을 읽어 들여 표준 출력 장치인 모니터에 출력한다. wc 명령은 표준 입력 장치로부터 문자열을 읽어 들여, 문자열의 줄 수, 문자열을 구성하는 단어 수, 문자열의 글자 수를 출력한다. 표준 입력 장치로 입력을 할 때 더 이상 입력을 원하지 않으면 Ctrl + D키를 입력한다. 유닉스 시스템은 정통적으로 작은 프로그램을 선호한다. 유닉스 시스템은 쉘(shell) 프로그래밍과 파이프 기호를 이용하고 작은 프로그램을 연동해서 좀더 강력한 기능을 사용 한다. ls 면령과 wc 명령을 파이프 기호로 연결한다. ls | wc..

바이트 기반 스트림 - 파일이나 배열의 내용을 읽어 들여 출력

파일이나 배열의 내용을 읽어 들여 출력하는 클래스 작성 파일이나 배열의 내용을 읽어 들여 출력하는 클래스를 작성한다. 프로그램을 실행할 때 인자로 'file'을 지정하면 이전에 작성했던 file.dat의 내용을 읽어 들여 화면에 출력하고, 인자를 array로 지정하면 알파벳 소문자가 저장되어 있는 배열의 내용을 읽어 들여 화면에 출력하는 프로그램이다. import java.io.*; public class FileArrayInputStreamTest { public static void print(InputStream in){ byte[] buffer = new byte[512]; int readcount = 0; try { while((readcount = in.read(buffer)) != -1){ ..

바이트 기반 스트림 - 파일 내용을 바이트 배열에 저장한 후 화면에 출력

파일 내용을 바이트 배열에 저장한 후 화면에 출력하기 파일의 내용을 읽어 들여 바이트 배열에 저장한 후, 배열의 내용을 읽어 들여 표준 출력 장치인 화면에 출력하는 예제이다. 프로그램을 작성하다 보면, 여러가지 이유로 파일의 내용을 읽어 들여 바이트를 배열화 시켜야 할 경우가 생긴다. 대표적인 예가 읽어 들인 파일의 일부분을 조작하고자 할 경우다. 다음 예제를 통해 파일의 내용을 바이트 배열화하고, 바이트 배열을 다시 화면에 출력함으로써 ByteArrayInputStream과 ByteArrayOutputStream의 사용법을 익혀본다. 단, JVM이 다루는 힙 메모리보다 큰 배열을 사용할 수 없기 때문에 작성시 주의해야 한다. import java.io.*; public class ByteArrayInp..

바이트 기반 스트림 - ByteArrayInputStream과 ByteArrayOutputStream

ByteArrayInputStream과 ByteArrayOutputStream ByteArrayInputStream은 말 그대로 바이트 배열을 차례대로 읽어 들이기 위한 클래스다. ByteArrayOutputStream은 내부적으로 저장 공간이 있어서, ByteArrayOutputStream에 있는 메소드를 이용해서 출력하게 되면, 출력되는 모든 내용들이 내부적인 저장 공간에 쌓이게 된다. 그 후에 ByteArrayOutputStream에 있는 toByteArray()를 실행하면, 저장된 모든 내용이 바이트 배열로 반환 된다. ByteArrayInputStream 클래스 생성자 생성자 설명 ByteArrayInputStream (byte[] buf) 바이트 배열 buf로부터 읽어 들이는 ByteArray..

바이트 기반 스트림 - 파일의 저장과 읽기(DataInputStream, DataOutputStream)

DataInputStream과 DataOutputStream을 이용한 파일의 저장과 읽기 DataInputStrream을 이용해서 다향한 형식의 기본형 데이터 파일에 저장한 후, DataOutputStream을 이용해서 파일에 저장된 내용을 읽어 들여 출력한다. DataInputStream과 DataOutputStream만으로는 해결하지 못한다. DataInputStream과 DataOutputStream 모두는 인자가 없는 생성자, 즉 기본 생성자가 없다. DataInputStream은 InputStream을 인자로 받아들이고 DataOutputStream은 OutputStream을 인자로 받아들인다. 그런데 입력을 파일로부터 받아들여야 하고, 출력은 파일에 해야 한다는 문제가 있다. 생성자는 읽어 들..

바이트 기반 스트림 - DataInputStream과 DataOutputStream

DataInputStream과 DataOutputStream DataInputStream과 DataOutputStream은 자바의 기본형 데이터인 int, float, double, boolan, short, byte 등의 정보를 입력하고 출력하는 데 알맞은 클래스다. DataInputStream은 생성자에서 InputStream을 받아들이며, DataOutputStream은 생성자에서 OutputStream을 받아들인다. 이는 다른 바이트 스트림을 통해서 읽어 들이거나 쓴다. 자바 IO 클래스는 생성자가 중요한 역할을 한다. 생성자에서 어떤 것을 지정했느냐에 따라서 읽어 들야할 대상과 써야할 대상이 틀려지기 때문이다. DataInputStream과 DataOutputStream이 각각 InputStre..

바이트 기반 스트림 - 파일 복사

파일 복사 FileInputStream과 FileOutputStream을 이용해서 파일을 복사하는 프로그램이다. import java.io.*; public class FileStreamCopy { public static void main(String[] args) { if(args.length != 2){ System.out.println("사용법 : java FileStreamCopy 파일1 파일2"); System.exit(0); } // if end FileInputStream fis = null; FileOutputStream fos = null; try{ fis = new FileInputStream(args[0]); fos = new FileOutputStream(args[1]); byte..