파일읽기 4

문자 스트림 - 파일 내용 읽어 화면 출력(InputStreamReader, OutputStreamWriter)

문자 단위로 파일 내용을 읽어 들여 화면에 출력하기 파일의 내용을 문자 단위로 읽어 들인 후, 문자 단위로 화면에 출력하는 예제다. 파일의 내용을 읽으려고 FileInputStream을 사용하고, 화면에 출력하려고 System.out(PrintStream)을 사용한다. 그렇지만 각각의 클래스들은 바이트 단위의 IO 클래스다. 따라서 문자 단위로 입출력을 하려면 InputStreamReader와 OutputStreamWriter를 이용해서 문자 단위 입출력으로 변환해야 한다. import java.io.*; public class StreamReaderTest { public static void main(String[] args) { if(args.length != 1){ System.out.printl..

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

파일이나 배열의 내용을 읽어 들여 출력하는 클래스 작성 파일이나 배열의 내용을 읽어 들여 출력하는 클래스를 작성한다. 프로그램을 실행할 때 인자로 '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){ ..

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

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

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

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