java.io 패키지 의 비교적 상세 한 설명

7624 단어 자바C++cF#asp
자바 의 핵심 라 이브 러 리 자바.io 는 파일 읽 기 쓰기,표준 장치 출력 등 전면적 인 IO 인 터 페 이 스 를 제공 합 니 다.자바 에서 IO 는 흐름 을 바탕 으로 입 출력 을 하 며 모든 데 이 터 를 직렬 화 되 어 출력 흐름 에 기록 하거나 입력 흐름 에서 읽 습 니 다.구체 적 인 사용 에서 많은 초보 자 들 이 자바.io 가방 의 사용 에 대해 매우 모호 하 다.본 고 는 자바.io 의 사용 에 대해 상세 하 게 설명 할 것 이다.1.Input 과 Output 1.stream 은 데 이 터 를 생산 할 수 있 는 모든 데이터 원본 이나 데 이 터 를 받 을 수 있 는 모든 수신 원 을 대표 합 니 다.자바 의 IO 시스템 에서 모든 stream(Input 과 Out stream 포함)은 두 가지 유형 을 포함한다.1.1 바 이 트 를 중심 으로 하 는 stream 은 바이트 단위 로 stream 에서 정 보 를 읽 거나 stream 에 기록 하 는 것 을 나타 낸다.바 이 트 를 중심 으로 하 는 stream 은 다음 과 같은 몇 가지 유형 을 포함 합 니 다.input stream:1)ByteArray Input Stream:메모리 에 있 는 버퍼 를 Input Stream 으로 사용 합 니 다.2)StringBuffer Input Stream:하나의 String 대상 을 Input Stream 으로 합 니 다.3)FileInput Stream:하나의 파일 을 Inp 로 합 니 다.utStream,파일 읽 기 동작 실현 4)PipedInputStream:pipe 의 개념 을 실현 하고,주로 스 레 드 에서 5)Sequence InputStream:여러 개의 InputStream 을 하나의 InputStream Out stream 으로 합 칩 니 다 1)ByteArray OutputStream:메모리 에 정 보 를 저장 하 는 버퍼 중 2)FileOutputStream:정 보 를 파일 에 저장 합 니 다 3)Piped OutputStreamm:pipe 의 개념 을 실 현 했 습 니 다.주로 스 레 드 에서 4)Sequence OutputStream 을 사용 합 니 다.여러 개의 OutStream 을 하나의 OutStream 1.2 유 니 코드 문 자 를 중심 으로 하 는 stream 을 유 니 코드 문 자 를 중심 으로 하 는 stream 으로 합 쳐 유 니 코드 문 자 를 단위 로 stream 에서 정 보 를 읽 거나 stream 에 기록 하 는 것 을 표시 합 니 다.유 니 코드 문 자 를 중심 으로 하 는 stream 은 다음 과 같은 몇 가지 유형 을 포함 합 니 다.Input Stream 1)CharArrayReader:ByteArray InputStream 과 대응 하 는 2)StringReader:StringBufferInputStream 과 대응 하 는 3)FileReader:FileInputStream 과 대응 하 는 4)PipedReader:PipedInpu 와 대응 합 니 다.tStream 대응 Out Stream 1)CharArray Write:ByteArray OutputStream 대응 2)StringWrite:이에 대응 하지 않 는 바이트 지향 stream 3)FileWrite:FileOutputStream 대응 4)PipedWrite:PipedOutputStream 대응 글자부 호 를 중심 으로 하 는 stream 은 기본적으로 이에 대응 하 는 바이트 를 중심 으로 하 는 stream 에 대해두 대응 류 가 실현 하 는 기능 이 같 고 글 자 는 조작 할 때 안내 가 다르다.예 를 들 어 CharArray Reader:ByteArray InputStream 과 같은 역할 은 메모리 에 있 는 버퍼 를 InputStream 으로 사용 합 니 다.다른 것 은 전 자 는 메모리 에서 한 바이트 의 정 보 를 읽 을 때마다 후 자 는 메모리 에서 한 문 자 를 읽 습 니 다.1.3 두 가지 보이 지 않 는 스 트림 간 의 변환 InputStreamReader 와 OutputStreamReader:바이트 지향 스 트림 을 문자 지향 스 트림 으로 변환 합 니 다.2.stream 에 속성 2.1'stream 에 속성 추가'의 역할 을 추가 합 니 다.위 에서 소개 한 자바 에서 IO 를 조작 하 는 API 를 사용 하면 우리 가 하고 싶 은 모든 작업 을 완성 할 수 있 습 니 다.그러나 FilterInputStream 과 FilterOutStream 의 하위 클래스 를 통 해 stream 에 속성 을 추가 할 수 있 습 니 다.다음은 하나의 예 로 이런 기능 의 작용 을 설명 한다.만약 우리 가 한 파일 에 데 이 터 를 쓰 려 고 한다 면,우 리 는 이렇게 조작 할 수 있다.FileOutStream fs=new FileOutStream("test.txt");그리고 fs 대상 을 통 해 write()함 수 를 호출 하여 test.txt 파일 에 데 이 터 를 기록 할 수 있 습 니 다.그러나'파일 에 쓸 데 이 터 를 메모리 에 먼저 캐 시 하고 캐 시 에 있 는 데 이 터 를 파일 에 기록 합 니 다'라 는 기능 을 실현 하려 면 위의 API 는 우리 의 수 요 를 만족 시 킬 수 있 는 것 이 하나 도 없습니다.그러나 FilterInputStream 과 FilterOutStream 의 하위 클래스 를 통 해 FileOutStream 에 필요 한 기능 을 추가 합 니 다.2.2 FilterInputStream 의 다양한 유형 2.2.1 바이트 지향 InputStream 1)DataInputStream:stream 에서 기본 형식(int,char 등)데 이 터 를 읽 습 니 다.2)BufferedInputStream:버퍼 3 사용)LineNumberInputStream:input stream 의 줄 수 를 기록 한 다음 getLineNumber()와 setLineNumber(int)4 를 호출 할 수 있 습 니 다.PushbackInputStream:거의 사용 되 지 않 습 니 다.일반적으로 컴 파일 러 개발 에 사용 되 는 2.2.2 문 자 를 중심 으로 하 는 InputStream 1)은 DataInputStream 과 대응 하 는 클래스 가 없습니다.readLine()을 사용 할 때 BufferedReader 로 바 꾸 지 않 는 한,그렇지 않 으 면 DataInputStream 2)BufferedReader:BufferedInputStream 과 대응 하 는 3)LineNumberReader:LineNumberInputStream 과 대응 하 는 4)PushBackReader:PushbackInputStream 과 대응 하 는 2.3 FilterOutStream 의 다양한 유형 2.2.3 은 바이트 중심의 OutputStream 을 봉인 하 는 데 사 용 됩 니 다.m 1)DataIOutStream:stream 에 기본 형식(int,char 등)데 이 터 를 출력 합 니 다.2)BufferedOutStream:버퍼 3 사용)PrintStream:포맷 출력 생 성 2.2.4 문 자 를 중심 으로 하 는 OutputStream 1)BufferedWrite:대응 하 는 2)PrintWrite:대응 하 는 3.RandomAccessFile 1)RandomAccess 를 통 해File 대상 이 파일 에 대한 읽 기와 쓰기 작업 을 마 쳤 습 니 다.2)대상 이 생 겼 을 때 열 파일 의 성질 을 가리 킬 수 있 습 니 다.r,읽 기만 합 니 다.w,쓰기 만 한다.rw 읽 기 및 쓰기 3)파일 에서 지정 한 위치 로 바로 이동 할 수 있 습 니 다.4.I/O 응용 예 자바 코드
  import java.io.*; 
  public class TestIO{ 
   public static void main(String[] args) 
   throws IOException{ 
   //1.               
   BufferedReader in = new BufferedReader( 
    new FileReader("F:\
epalon\\TestIO.java"));    String s, s2 = new String();    while((s = in.readLine()) != null)    s2 += s + "
";    in.close();    //1b.    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));    System.out.println("Enter a line:");    System.out.println(stdin.readLine());    //2. String    StringReader in2 = new StringReader(s2);    int c;    while((c = in2.read()) != -1)    System.out.println((char)c);    in2.close();    //3.    try{     DataInputStream in3 =new DataInputStream(new ByteArrayInputStream(s2.getBytes()));     while(true)      System.out.println((char)in3.readByte());    }    catch(EOFException e){     System.out.println("End of stream");    }    //4.    try{     BufferedReader in4 =new BufferedReader(new StringReader(s2));     PrintWriter out1 =new PrintWriter(new BufferedWriter(new FileWriter("F:\
epalon\\ TestIO.out")));     int lineCount = 1;     while((s = in4.readLine()) != null)      out1.println(lineCount++ + ":" + s);      out1.close();      in4.close();    }    catch(EOFException ex){     System.out.println("End of stream");    }    //5.    try{     DataOutputStream out2 =new DataOutputStream(new BufferedOutputStream(      new FileOutputStream("F:\
epalon\\ Data.txt")));     out2.writeDouble(3.1415926);     out2.writeChars("
Thas was pi:writeChars
");     out2.writeBytes("Thas was pi:writeByte
");     out2.close();     DataInputStream in5 =new DataInputStream(      new BufferedInputStream(new FileInputStream("F:\
epalon\\ Data.txt")));      BufferedReader in5br =new BufferedReader(new InputStreamReader(in5));      System.out.println(in5.readDouble());      System.out.println(in5br.readLine());      System.out.println(in5br.readLine());    }    catch(EOFException e){     System.out.println("End of stream");    }    //6. RandomAccessFile    RandomAccessFile rf = new RandomAccessFile("F:\
epalon\\ rtest.dat", "rw");    for(int i=0; i <10; i++)     rf.writeDouble(i*1.414);     rf.close();     rf = new RandomAccessFile("F:\
epalon\\ rtest.dat", "r");     for(int i=0; i <10; i++)      System.out.println("Value " + i + ":" + rf.readDouble());      rf.close();      rf = new RandomAccessFile("F:\
epalon\\ rtest.dat", "rw");      rf.seek(5*8);      rf.writeDouble(47.0001);      rf.close();      rf = new RandomAccessFile("F:\
epalon\\ rtest.dat", "r");      for(int i=0; i <10; i++)       System.out.println("Value " + i + ":" + rf.readDouble());       rf.close();     }    }

 코드 에 대한 설명(구역 단위):1 구역 에서 파일 을 읽 을 때 파일 내용 을 캐 시 에 읽 고 in.readLine()을 호출 할 때 캐 시 에서 문자 로 데 이 터 를 읽 습 니 다(이하'캐 시 바이트 읽 기 방식'이 라 고 약칭).1b 구역 에 서 는 표준 IO(키보드)에서 캐 시 바이트 읽 기 방식 으로 데 이 터 를 읽 으 려 면 표준 IO(System.in)를 문자 지향 stream 으로 변환 한 다음 Buffered Reader 패 키 징 을 해 야 합 니 다.2 구역 에 서 는 String 대상 에서 문자 로 데 이 터 를 읽 으 려 면 StringReader 형식의 stream 을 만들어 야 합 니 다.
원문

좋은 웹페이지 즐겨찾기