개인참고자료/자바(네트워크)

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

경진 2008. 7. 13. 17:20
파일 내용을 바이트 배열에 저장한 후 화면에 출력하기 

파일의 내용을 읽어 들여 바이트 배열에 저장한 후, 배열의 내용을 읽어 들여 표준 출력 장치인 화면에 출력하는 예제이다.

프로그램을 작성하다 보면, 여러가지 이유로 파일의 내용을 읽어 들여 바이트를 배열화 시켜야 할 경우가 생긴다. 대표적인 예가 읽어 들인 파일의 일부분을 조작하고자 할 경우다.

다음 예제를 통해 파일의 내용을 바이트 배열화하고, 바이트 배열을 다시 화면에 출력함으로써 ByteArrayInputStream과 ByteArrayOutputStream의 사용법을 익혀본다.
단, JVM이 다루는 힙 메모리보다 큰 배열을 사용할 수 없기 때문에 작성시 주의해야 한다.

import java.io.*;

public class ByteArrayInputOutputTest {

    public static void main(String[] args) {
        if(args.length != 1){
            System.out.println("사용법 : java ByteArrayInputOutputTest 파일이름");
            System.exit(0);
        } // if end
       
        FileInputStream fis = null;
        ByteArrayInputStream bais = null;
        ByteArrayOutputStream baos = null;       
        try{
            fis = new FileInputStream(args[0]);
            baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[512];
            int readcount = 0;
            // 파일로 부터 읽어들인 byte배열을 ByteArrayOutputStream에게 쓴다.
            while((readcount = fis.read(buffer)) != -1){
                baos.write(buffer, 0, readcount);   
            }
           
            // ByteArrayOutputStream의 내부 저장공간에 저장된 바이트 배열을 반환한다.
            byte[] fileArray = baos.toByteArray();
            System.out.println("파일의 내용을 모두 읽어들여 byte[]로 만들었습니다.");
            System.out.println("읽어들인 byte의 수 :" + fileArray.length);
           
            // byte[]로 부터 읽어들이는 ByteArrayInputStrem을 생성한다.
            bais = new ByteArrayInputStream(fileArray);
            // ByteArrayInputStream을 통하여 읽어들인 byte배열을 표준 출력 장치(모니터)에 출력한다.
            while((readcount = bais.read(buffer)) != -1){
                System.out.write(buffer, 0, readcount);   
            }
            System.out.println("\n\n");
            System.out.println("읽어들인 내용을 모두 출력하였습니다.");           
        }catch(Exception ex){
            System.out.println(ex);
        }finally{
            try{
                fis.close();
                bais.close();
                baos.close();
            }catch(IOException ioe){
                System.out.println(ioe);
            }
        }
    }
}

            fis = new FileInputStream(args[0]);
            baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[512];
            int readcount = 0;
            // 파일로 부터 읽어들인 byte배열을 ByteArrayOutputStream에게 쓴다.
            while((readcount = fis.read(buffer)) != -1){
                baos.write(buffer, 0, readcount);   
            }

FileInpustStream을 이용해서 파일의 내용을 읽어 들인 바이트 배열 buffer를 ByteArrayOutputStream에 있는 write() 메소드를 이용해서 출력한다. 출력한 결과는 ByteArrayOutputStream의 내부 저장 공간에 저장된다.

            byte[] fileArray = baos.toByteArray();
            System.out.println("파일의 내용을 모두 읽어들여 byte[]로 만들었습니다.");
            System.out.println("읽어들인 byte의 수 :" + fileArray.length);

ByteArrayOutputStream에 있는 toByteArray() 메소드를 이용해서 ByteArrayOutputStream의 내부 저장공간에 저장되어 잇는 바이트 배열을 반환한다.

            // byte[]로 부터 읽어들이는 ByteArrayInputStrem을 생성한다.
            bais = new ByteArrayInputStream(fileArray);
            // ByteArrayInputStream을 통하여 읽어들인 byte배열을 표준 출력 장치(모니터)에 출력한다.
            while((readcount = bais.read(buffer)) != -1){
                System.out.write(buffer, 0, readcount);   
            }

바이트 배열로 부터 읽어 들이는 ByteArrayInputStream을 생성 후, read() 메소드를 이용해서 바이트 배열의 내용을 읽어 들인다. 읽어 들인 내용은 System.out에 있는 write() 메소드를 이용해서 표준 출력장치(모니터)를 통해 출력한다.

첨부파일


file.dat 파일은 동일한 디렉토리에 있어야한다.


결과화면