2008/07 95

바이트 기반 스트림 - 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..

바이트 기반 스트림 - 파일을 읽어 출력(개선)

파일을 읽어 출력하는 프로그램의 개선 앞에 했던 예제는 효율이 떨어지는 문제가 있다. 효율이 떨어지는 이유는 운영체제에 있다. 우리가 사용하는 운영체제는 하드웨어를 제어하는 기능이 있다. 자바에서 파일을 읽어 들이라고 명령을 내리면, 내부적으로는 운영체제에게 부탁해서 물리적 장치인 하드디스크로부터 읽어오게 된다. 그런데 이 읽어오는 부분에서 몇가지 중요한 점을 고려해야 한다. 자바 프로그래밍으로 1바이트를 읽어오라고 시리행하면, 운영체제는 실제로 1바이트를 읽지 않고 보통 인접한 256바이트나 512바이트를 읽게 된다. 이는 1000바이트의 파일을 1바이트씩 읽어오라고 실행하면, 내부적으로는 512바이트씩 1000번 읽어온다. 이런 문제를 해결하려면 1바이트씩 읽어 들이는 것이 아니라, 운영체제가 실제로..

바이트 기반 스트림 - 파일의 내용을 읽어 들여 화면에 출력

파일의 내용을 읽어 들여 화면에 출력하는 프로그램 import java.io.*; public class FileView { public static void main(String[] args) { if(args.length != 1){ System.out.println("사용법 : java FileView 파일이름"); System.exit(0); } // if end FileInputStream fis = null; try{ fis = new FileInputStream(args[0]); int i = 0; while((i = fis.read()) != -1){ System.out.write(i); } }catch(Exception ex){ System.out.println(ex); }finally{..

바이트 기반 스트림 - FileInputStream과 FileOutputStream

FileInputStream과 FileOutputStream FileInputStream과 FileOutputStream은 각각 InputStream과 OutputStream을 상속받으며, 파일로부터 바이트 단위로 입력받고, 대상 파일에 바이트 단위로 출력할 수 있는 클래스다. FileInputStream과 FileOutputStream의 생성자는 파일명이나 파일 정보가 있는 File 클래스에 대한 객체를 전달받는다. 그리고 FileInputStream의 경우, 생성자에 전달한 파일명이 실제로 존재하지 않는 파일명이면 java.io.FileNotFoundException을 발생시킨다. FileInputStream 생성자 메소드 설명 FileInputStream (String filepath) throws..

바이트 기반 스트림 - System.in을 이용해서 키보드로부터 입력받기

System.in을 이용해서 키보드로부터 입력받기 System.in은 InputStrream 형식이라고 했다. 이는 InputStream에 있는 모든 메소드를 사용할 수 있다. import java.io.*; public class SystemInputTest { public static void main(String[] args) { int i = 0; try { while((i = System.in.read()) != -1){ System.out.write(i); } // while문 종료 } catch (IOException e) { System.out.println(e); } } // main 메소드 종료 } while((i = System.in.read()) != -1){ …… } // whil..

바이트 기반 스트림 - 바이트 단위 IO 클래스, InputStream과 OutputStream

바이트 단위 IO 클래스 바이트 단위 IO 클래스는 가장 기본이 되는 IO 클래스다. 컴퓨터에 존재하는 모든 데이터는 바이트 단위로 구성되어 있기 때문이다. 바이트 스트림 클래스는 모두 추상 클래스(abstractclass)인 InputStream과 OutputSream의 자식(하위) 클래스다. 이는 입력과 관련된 모든 바이트 스트림은 InputStream에 있는 메소드를 포함하며, 출려과 관련된 모든 바이트 스트림은 OutputStream에 있는 메소드를 포함한다. InputStream과 OutputStream InputStream과 OutputStream은 모든 바이트 스트림의 최상위 클래스다. InputStream과 OutputStream 클래스는 추상클래스로서, 바이트 단위로 입출력하기 위한 가장..

바이트 기반 스트림 - File 클래스를 이용한 임시파일의 생성과 삭제

File 클래스를 이용한 임시파일의 생성과 삭제 프로그램을 작성하다 보면 임시로 파일을 생성할 필요하 생긴다. 예를 들어 외부 파일을 이용해서 정렬할 경우가 대표적인 예다. 하지만 문제는 "외부 파일명을 어떻게 정할 것인가?"하는 부분이다. 동일한 이름의 파일이 있을 경우에는 심각한 문제가 발생할 수 있기 때문이다. 이러한 문제점을 해결하기 위해서 File 클래스는 임시 파일을 생성하는 createTempFile()이라는 static한 메소드를 포함하고 있다. createTempFile() 메소드를 이용해서 생성되는 임시 파일의 경우, 파일의 앞 글자와 뒷글자만 사용자가 정의하면 중간의 문자열은 임의 글자로 자동으로 지정된다. 이 경우, 자동으로 생성되는 파일명은 임시 파일이 저장되는 디렉토리에서는 유일..