JAVA 입 출력 (IO) 바이트 흐름

이전 블 로그 에서 어떤 종 류 를 소개 할 때 저 는 유형의 구조 방법 과 방법 요약 을 표를 통 해 보 여 드 리 겠 습 니 다. 이런 내용 은 JDKAPI 에서 모두 찾 을 수 있 기 때문에 이 블 로그 부터 이런 방법 들 은 모두 열거 되 지 않 고 그 중에서 자주 사용 하 는 방법 을 추출 할 것 입 니 다.본론 으로 들 어가 면 지난 블 로그 'JAVA 입 출력 (IO) 의 파일' 에서 File 류 의 간단 한 사용 을 소개 했다. 만약 에 우리 가 파일 을 읽 고 쓰 려 면 하나의 File 만 으로 는 부족 하 다. 이 편 은 바이트 흐름 의 개념 을 소개 하고 이 블 로 거 를 통 해 우 리 는 파일 읽 기, 쓰기, 복사 등 을 실현 할 수 있다.물론 입 출력 흐름 은 파일 의 읽 기와 쓰기 뿐만 아니 라 네트워크 통신, 프로 세 스 통신 등에 도 사용 할 수 있다.
바이트 입력 흐름
java. io. InputStream 클래스 는 바이트 입력 흐름 을 나타 내 는 모든 종류의 초 클래스 입 니 다. 바이트 입력 흐름 은 이 종 류 를 직접 또는 간접 적 으로 계승 합 니 다. 보통 이러한 자손 류 를 사용 하여 바이트 입력 흐름 을 조작 하여 바이트 입력 흐름 을 읽 습 니 다.이런 종류 중에서 우리 가 가장 자주 사용 하 는 방법 은 다음 과 같다.
반환 값
방법
설명 하 다.
void
close()
이 입력 흐름 을 닫 고 이 흐름 과 연 결 된 모든 시스템 자원 을 방출 합 니 다.
abstract int
read()
입력 흐름 에서 데 이 터 를 읽 는 다음 바이트
int
read(byte[] b)
입력 흐름 에서 일정 수량의 바이트 를 읽 고 버퍼 그룹 b 에 저장 합 니 다.
int read(byte[] b, int off, int len)
입력 흐름 중 최대 len 개의 데이터 바이트 를 byte 배열 로 읽 습 니 다.
많은 초보 자 들 에 게 는 언제 입력 흐름 을 사용 하고 언제 출력 흐름 을 사용 하 는 지 고민 할 때 가 있다.사실 이것 은 매우 간단 하 다. 우 리 는 데이터 의 흐름 만 알 면 된다. 만약 데이터 가 메모리 로 흐 르 는 것 이 라면 입력 흐름 이 고 메모리 에서 흘러 나 오 는 것 은 출력 흐름 이다.
입력 흐름 의 실현 클래스 도 많 기 때문에 파일 입력 흐름 (java. io. FileInputStream) 을 예 로 들 어 소개 합 니 다. 다른 입력 흐름 은 기본적으로 대동소이 하기 때문에 스스로 사용 해 볼 수 있 습 니 다.주의해 야 할 것 은 입력 흐름 이 든 출력 흐름 이 든 사용 이 끝 난 후에 해당 하 는 닫 기 방법 으로 흐 르 는 자원 을 방출 하고 자원 을 닫 을 때 먼저 열 고 닫 는 원칙 을 따른다 는 것 이다.
직접 예:
import java.io.FileInputStream;
import java.io.IOException;

public class FileReadWrite {
   public static void main(String[] args)
   {
      FileInputStream stream = null;
      try
      {
         //              
         //test.txt     :111111111112121112211212
         stream = new FileInputStream("test.txt");
         int data = -1;
         //               ,         ,    -1
         while ((data = stream.read()) != -1)
         {
            //           ,         ,             
            System.out.print((char) data);
         }
      }
      catch (IOException e)
      {
         //    
      }
      finally
      {
         try
         {
            if (stream != null)
            {
               //      
               stream.close();
            }
         }
         catch (IOException e)
         {
         }
      }
   }
}

운행 결과: 111111112121112211212read() 방법 을 사용 하 는 효율 은 매우 낮 으 며, 실제 개발 에 서 는 자주 사용 read(byte[] b) 하 며, 또 JAVA 입력 흐름 은 완충 흐름 도 제공한다.java.io.BufferedInputStream 바이트 입력 버퍼 흐름 입 니 다.BufferedInputStream 은 다른 입력 흐름 에 버퍼 입력 과 mark 와 reset 방법 을 지원 하 는 기능 을 추가 합 니 다.Buffered InputStream 을 만 들 때 내부 버퍼 배열 을 만 듭 니 다.스 트림 의 바 이 트 를 읽 거나 건 너 뛸 때 필요 한 입력 흐름 에 따라 내부 버퍼 를 다시 채 우 고 한 번 에 여러 바 이 트 를 채 울 수 있 습 니 다.mark 작업 은 입력 흐름 의 한 점 을 기록 합 니 다. reset 작업 은 포 함 된 입력 흐름 에서 새 바 이 트 를 가 져 오기 전에 마지막 mark 작업 후 읽 은 모든 바 이 트 를 다시 읽 습 니 다.
바이트 출력 흐름
JAVA 의 바이트 입력 흐름 을 소개 하면 반대로 바이트 출력 흐름 이 나온다.java. io. Output Stream 클래스 는 출력 바이트 흐름 을 나타 내 는 모든 클래스 의 초 클래스 입 니 다.
이런 종류 중에서 우리 가 가장 자주 사용 하 는 방법 은 다음 과 같다.
반환 값
방법
설명 하 다.
void
close()
이 출력 흐름 을 닫 고 이 흐름 과 관련 된 모든 시스템 자원 을 방출 합 니 다.
void
flush()
이 출력 흐름 을 새로 고치 고 모든 버퍼 의 출력 바 이 트 를 강제로 씁 니 다.
void
write(byte[] b)
이 출력 흐름 에 b. length 바이트 를 지정 한 byte 배열 에서 기록 합 니 다.
void
write(byte[] b, int off, int len)
지정 한 byte 배열 에서 오프셋 off 에서 시작 하 는 len 바이트 를 이 출력 흐름 에 기록 합 니 다.
abstract void
write(int b)
이 출력 흐름 에 지정 한 바이트 쓰기
출력 흐름 은 출력 바이트 를 받 아들 여 수신 기 에 보 냅 니 다.FileInputStream 에 대응 하 는 자바. io. FileOutputStream 클래스 가 있 습 니 다.파일 에 데 이 터 를 쓰 는 것 을 FileOutputStream 으로 보 여 줍 니 다.
import java.io.FileOutputStream;
import java.io.IOException;

public class FileReadWrite {
   public static void main(String[] args)
   {
      FileOutputStream stream = null;
      try
      {
         stream = new FileOutputStream("test.txt");
         //          
         stream.write("11111".getBytes());
         //                     
         stream.flush();
      }
      catch (IOException e)
      {
         e.printStackTrace();
      }
      finally
      {
         try
         {
            //   
            if (stream != null)
            {
               stream.close();
            }
         }
         catch (IOException e)
         {
         }
      }
   }
}

사용 예시
이제 입력 흐름 과 출력 흐름 을 통합 하여 파일 복 사 를 완료 합 니 다.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileReadWrite {
   /** *      * * @param src *     * @param desc *      * @return */
   public boolean copy(String src, String desc)
   {
      FileInputStream inputStream = null;
      FileOutputStream outputStream = null;
      try
      {
         inputStream = new FileInputStream(src);
         outputStream = new FileOutputStream(desc);
         int len = -1;
         byte[] buffer = new byte[512];
         //     ,      
         while ((len = inputStream.read(buffer)) != -1)
         {
            outputStream.write(buffer, 0, len);
         }
         outputStream.flush();
      }
      catch (IOException e)
      {
         e.printStackTrace();
         return false;
      }
      finally
      {
         try
         {
            //   
            if (inputStream != null)
            {
               inputStream.close();
            }
         }
         catch (IOException e)
         {
         }
         try
         {
            //   
            if (outputStream != null)
            {
               outputStream.close();
            }
         }
         catch (IOException e)
         {
         }
      }
      return true;
   }
}

좋은 웹페이지 즐겨찾기