출처 : http://cafe.naver.com/ccjmaster.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=133

 

=========================================================================================

 

자바에서 처리하는 입력과 출력은 스트림(Stream)에 의존하다.

 

다시 말해 모든 형태의 입력과 출력은 1byte의 흐름으로 이루어져 있다는 이야기이다.

 

그런데 이러한 작업 처리를 텍스트 기반으로 한 형태로 바꿔 준다든지, 객체 기반으로 한 형태로 바꾸어 준다든지 하는 클래스가 있다.

 

우리는 먼저 1byte의 기본 입력과 출력 클래스 몇 가지를 공부하고 다음으로 각 형태로 변경시키는 클래스를 살펴보도록 할 것이다.

 

우선 1byte의 입력과 출력 기본 클래스는 InputStream과 OutputStream이다. 각 클래스의 상속관계는 다음과 같다.

 

  OutputStream

    ▶ FileOutputStream

    ▶ ByteArrayOutputStream

    ▶ PipedOutputStream

    ▶ ObjectOutputStream

    ▶ FilterOutputStream - BufferedOutputStream

    ▶ PaintStream

    ▶ DataOutputStream

 

  InputStream

    ▶ FileInputStream

    ▶ ByteArrayInputStream

    ▶ PipedInputStream

    ▶ ObjectInputStream

    ▶ SequenceInputStream

    ▶ AudioInputStream

    ▶ StringBufferInputStream

    ▶ FilterInputStream - BufferedInputStream

    ▶ LineNumberInputStream

         PushbackInputStream

         DataInputStream

 

여기에 표시된 많은 클래스를 다 공부한다는 것은 우리가 배우고자 하는 범위를 벗어나는 것이므로

 

실제로 파일 입·출력에서 많이 쓰는 형식을 한 가지씩만 외우도록 하자.

 

1byte 출력

 

  (1) 콘솔 출력용

    FileOutputStream fos = new FileOutputStream(FileDescriptor.out);
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    DataOutputStream dos = new DataOutputStream(bos);

    dos.write
 

  (2) 파일 출력용  
    File file = new File("파일명");
    FileOutputStream fos = new FileOutputStream(file);
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    DataOutputStream dos = new DataOutputStream(bos);

    dos.write
  

  (3) 네트워크 출력용
    Socket soc = new Socket();
    BufferedOutputStream bos = new BufferedOutputStream(soc.getOutputStream());
    DataOutputStream bos = new DataOutputStream(bos);

    dos.write

 

1byte 입력

 

  (1) 콘솔 입력용

    FileInputStream fis = new FileInputStream(FileDescriptor.in);
    BufferedInputStream bis = new BufferedInputStream(fis);
    DataInputStream dis = new DataInputStream(bis);
    dis.read()…
  

  (2) 파일 입력용
    File file = new File("파일명");
    FileInputStream fis = new FileInputStream(file);
    BufferedInputStream bis = new BufferedInputStream(fis);
    DataInputStream dis = new DataInputStream(bis);
    dis.read()…
  

  (3) 네트워크 입력용
    Socket soc = new Socket(…);
    BufferedInputStream bis = new BufferedInputStream(soc.getInputStream());
    DataInputStream bis = new DataInputStream(bis);
    dis.read()…

 

이제 간단한 형태의 입·출력 예제를 처리해 보도록 하자.

 

EX 01

 

import java.io.*;

public class Java {
  public static void main(String[] args) {
    File file = new File("C:\\java\\work\\abc.txt"); // C:\\java\\work\\abc.txt 에 대한 객체를 생성한다.
    try {
      FileOutputStream fos = new FileOutputStream(FileDescriptor.out); // 콘솔에 대한 출력 스트림을 생성한다.
      FileOutputStream fos1 = new FileOutputStream(file); // 파일에 대한 출력 스트림을 생성한다.
      byte[] data = {66, 68, 70, 72, (byte) '!'}; // B, D, F, H, ! 에 대한 배열을 생성한다.
      fos.write(data);
      fos1.write(data);
      // fos.close();
      // fos1.close();
    }catch(FileNotFoundException fnfe){
      System.err.println("파일을 못찾겠다.");
      System.exit(1);
    }catch(IOException io){
      System.err.println("파일 입출력 에러");
      System.exit(1);
    }
    System.out.println("실행 끝");
  }
}


 

EX 02

 

import java.io.*;

public class Java {
  public static void main(String[] args) throws FileNotFoundException, IOException{
    /*
    FileInputStream fis = new FileInputStream(FileDescriptor.in); // 키보드로부터 입력 객체를 생성한다.
    System.out.print("입력 = ");
    byte by = fis.read(); 
    */ 
    File file = new File("C:\\java\\work\\abc.txt"); // 파일로부터의 입력 객체를 생성한다.

    FileInputStream fis = new FileInputStream(file);  
    byte[] by = new byte[65536];
    int count = fis.read(by);
    for(int i = 0; i < count; i++){
      System.out.println(i + " : " + (char)by[i]);
    }
  }
}

 

EX03

 

import java.io.*;

public class Java {
  public static void main(String[] args) throws FileNotFoundException, IOException{
   

   /*

    < DataOutputStream을 풀어서 썼을 때의 코딩>
       File file = new File("c:\\java\\work");
       FileOutputStream fos = new FileOutputStream(file);
       BufferedOutputStream bos = new BufferedOutputStream(fos); // 512byte
       DataOutputStream dos = new DataOutputStream(bos);
   */
  
    // 1byte 출력을 위한 객체
    DataOutputStream dos1 = new DataOutputStream(new BufferedOutputStream(new FileOutputStream

    (new File(new File  "c:\\java\\wordk"),"HJH.txt")))); // 파일에 대한 출력 객체를 생성
    dos1.writeInt(23); // int형 숫자를 출력한다. 이것은 출력하면 파일에는 4byte의 영역을 확보하고 데이터가 표시된다.

                             // 그래서 결과가 이상하게 보인다.
    dos1.writeDouble(12.345); // double형 숫자를 출력한다. 역시 int형과 마찬가지로 8byte의 영역을 확보 후 데이터 표시

    dos1.writeBytes("ABCDEFG"); // 1byte씩 문자 형태로 출력한다. 정상적으로 보인다.

    dos1.close();
  }
}

 

EX04

 

import java.io.*;

public class Java {
  public static void main(String[] args) {
    DataInputStream dis1 = null;
    try{
      dis1 = new DataInputStream(new BufferedInputStream(new FileInputStream

      (new File(new File("c:\\java\\wordk"),"HJH.txt")))); // DataInputStream 입력 객체를 생성한다.
    } catch (FileNotFoundException fnfe){}
    int a = 0;
    double b = 0.0;
    byte[] c = null;
    try{
      a = dis1.readInt(); // int형 데이터를 입력받는다. 처음 4byte를 입력받아 저장해 둔다.
      b = dis1.readDouble(); // double형으로 데이터를 입력받는다. 다음 8byte를 입력받아 double형으로 변환한다.
      c = new byte[10]; // 문자 배열을 선언한 후 그곳에 결과를 입력받는다.
    dis1.read(c);
    dis1.close();
    }catch(IOException ie){}
   
    System.out.println("a = " + a);
    System.out.println("b = " + b);
    System.out.println("c = " + new String(c));
  }
}

'자바 > 자바팁' 카테고리의 다른 글

네이버 svn 설치방법 참고  (0) 2010.12.09
네이버 svn 설치방법  (0) 2010.12.08
색상표  (0) 2010.12.02
[펌]압축 관련 스트림 팁  (0) 2010.12.01
javax.swing.event 에서의 ListDataEvent 에 관한 설명  (1) 2010.11.17

+ Recent posts