JAVA 기본 바이트 흐름 과 문자 흐름

19514 단어
원본 링크:http://www.cnblogs.com/21-forever/p/11030196.html
개인 적 인 이해:
IO 흐름 은 데 이 터 를 조작 하 는 방식 으로 인 코딩 이 다 르 기 때문에 파일 에 대한 조작 은 두 가지 가 생 긴 다.바이트 흐름 을 사용 하 는 것 이 좋 습 니 다. 한자 등 을 보기 편 하도록 문자 흐름 을 사용 할 수 있 습 니 다.모든 유 파 는 입력 과 출력 으로 나 뉘 어 복사 파일 을 만 들 수 있 습 니 다!주의해 야 할 것 은 Flush () 는 새로 고침 이 아니 라 비 우 는 것 입 니 다.일반적으로 IO 에 사 용 됩 니 다. 즉, 버퍼 데 이 터 를 비 우 는 것 입 니 다. 즉, 읽 기와 쓰기 스 트림 을 사용 할 때 사실은 데 이 터 는 메모리 에 먼저 읽 힌 다음 에 데이터 로 파일 에 쓰 는 것 입 니 다. 데 이 터 를 다 읽 었 을 때 데 이 터 를 다 쓴 것 이 아 닙 니 다. 메모리 라 는 버퍼 에 남 을 수도 있 기 때 문 입 니 다.이 럴 때 close () 방법 을 사용 하여 읽 기와 쓰기 흐름 을 닫 으 면 이 부분의 데 이 터 를 잃 어 버 리 므 로 읽 기와 쓰기 흐름 을 닫 기 전에 flush () 를 사용 하고 데 이 터 를 비 워 야 합 니 다.
1. IO 흐름:
1. JAVA 가 데이터 에 대한 조작 은 흐름 을 통 해 이 루어 지 며 JAVA 가 데이터 흐름 을 조작 하 는 클래스 는 모두 IO 패키지 에 있 습 니 다.
2. IO 는 설비 간 에 데이터 전송 을 하 는 작업 에 사용 된다.
3. 분류:
① 흐름:
입력 흐름 (데이터 읽 기)
출력 흐름 (데이터 쓰기)
② 、 데이터 형식:
바이트 흐름 (모든 데 이 터 를 조작 할 수 있 음):
바이트 입력 흐름
바이트 출력 흐름
문자 흐름:
문자 입력 흐름
문자 출력 흐름
주의:
어떤 점 수 를 나 누 는 지 명확 하 게 설명 하지 않 으 면 기본적으로 데이터 형식 에 따라 나눈다.
파일 이 windows 가 가지 고 있 는 메모 장 으로 열 리 지 않 는 한 읽 을 수 있 는 문자 흐름 을 사용 하 는 것 을 권장 합 니 다. 그렇지 않 으 면 바이트 흐름 을 사용 하 는 것 을 권장 합 니 다.
4. IO 프로그램 작성:
사용 하기 전에 IO 패키지 의 이상 가 져 오기;
사용 시 IO 이상 처리 가능;
사용 후 자원 을 방출 합 니 다.
2. 바이트 흐름:
1. 바이트 출력 흐름: outputStream
하위 클래스: 파일 출력 흐름 FileOutputStream 은 데 이 터 를 File 의 출력 흐름 에 기록 하 는 데 사 용 됩 니 다.
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo01 {
    public static void main(String[] args) throws IOException {
        //         (     ,            ,      )
        //           ,    ,   !     ,   !
    FileOutputStream fos=new FileOutputStream("D:\\java\\a.txt");
    //                 write (          ASCII )0-48  a-97 A-65
    fos.write(49);
    fos.write(48);
    fos.write(48);
    //             write(byte[] b)    ,     ,          !        ?
    byte[] bytes={-66,-67,-68,-69,-70};
    //fos.write(bytes);
    fos.write(bytes,2,2);//                 
    //    
    fos.close();
    }    
}
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo02 {
    public static void main(String[] args) throws IOException {
        //       (      )   flase
        FileOutputStream fos=new FileOutputStream("D:\\java\\b.txt",true);
        //         getByte()
        fos.write("abc".getBytes());
        //   \r
fos.write("\r
".getBytes()); // fos.close(); } }

이상 처리:
  
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo03 {
    public static void main(String[] args)  {
        //    :close        finally  ,
        //    fos    ,            
        FileOutputStream fos=null;
        try {
            fos=new FileOutputStream("D:\\java\\b.txt",true);
            fos.write("abc".getBytes());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                fos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

2. 바이트 입력 흐름: InputStream
하위 클래스: FileInputStream 파일 입력 흐름
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Demo04 {
    public static void main(String[] args) throws IOException {
        //       (            )
        FileInputStream fis=new FileInputStream("D:\\java\\d.txt");
        //      
        /*int len=fis.read();
        System.out.println((char)len);//    int     char  
        len=fis.read();
        System.out.println((char)len);//    int     char  
        len=fis.read();
        System.out.println((char)len);//    int     char  
        len=fis.read();
        System.out.println((char)len);//    int     char  
        len=fis.read();
        System.out.println((char)len);//    int     char  
        len=fis.read();
        System.out.println(len);//  5   ,          ,  len  -1*/
        //                 
        int len=0;
        while((len=fis.read())!=-1){
            System.out.println((char)len);
        }
        //    
        fis.close();
    }
}    
import java.io.FileInputStream;
import java.io.IOException;

public class Demo05 {
        public static void main(String[] args) throws IOException {
            //     
            FileInputStream fis=new FileInputStream("D:\\java\\d.txt");
            //      
            byte[] bytes=new byte[2];
        /*    //        
            int len= fis.read(bytes);
            //          
            System.out.println(len);
            //         
            System.out.println(new String(bytes));*/
            //        
            int len=0;
            while((len=fis.read(bytes))!=-1){
                System.out.println(new String(bytes,0,len));// 0     len 
            }
            fis.close();
        }
}

3. 파일 복사:
  
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Copy {
    public static void main(String[] args) throws IOException {
        //     
        FileInputStream fis=new FileInputStream("D:\\java\\d.txt");
        //     
        FileOutputStream fos=new FileOutputStream("D:\\java\\e.txt");
        //    
        int len=0;
        while((len=fis.read())!=-1){
            fos.write(len);
        }
        //    
        fis.close();
        fos.close();
    }
}

3. 문자 흐름:
1. 문자 흐름 소개:
바이트 흐름 대비 (모든 데 이 터 를 조작 할 수 있 음)
① 바이트 흐름 은 중국어 데 이 터 를 조작 하 는 데 특별히 편리 하지 않 기 때문에 전환 흐름 이 나타난다.
흐름 을 바 꾸 는 역할 은 바이트 흐름 을 문자 흐름 으로 바 꾸 어 사용 하 는 것 이다.
② 、 전환 흐름 은 문자 흐름 입 니 다.
문자 흐름 = 바이트 흐름 + 인 코딩 테이블
2. 인 코딩 표:
① ASCII 표: 한 바이트 의 7 자 리 는 해당 하 는 바이트 가 모두 정수 임 을 나타 낸다.
② 、 GBK: 현재 가장 많이 사용 되 는 중국어 코드 표, 2 만 개의 중국어 와 기호.두 개의 바이트 로 그 중의 일부 문 자 를 나타 내 는데 첫 번 째 바이트 의 시작 은 1 이 고 두 번 째 바이트 의 시작 은 0 이다.
③ 、 유 니 코드: 국제 표준 코드 표;어떤 문자 든 두 바이트 로 저장 합 니 다.
char 유형 은 바로 이 메타 입 니 다. 두 바이트 를 차지 합 니 다.
utf - 8 은 유 니 코드 를 기반 으로 한 바이트 에 데 이 터 를 저장 할 수 있 습 니 다. 두 바이트 로 저장 하지 마 십시오. 그리고 이 코드 표 는 더욱 표준화 되 었 습 니 다.
3. 문자 입력 흐름: Reader
하위 클래스 FileReader 파일 입력 흐름
  
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Demo02 {
    public static void main(String[] args) throws IOException {
        //       
        FileReader fr=new FileReader("D:\\java\\d.txt");
        //      
        char[] ch=new char[1024];
        //             
        int len=0;
        while((len=fr.read(ch))!=-1){
            System.out.println(new String(ch,0,len));
        }
        //    
        fr.close();
    }
}

4. 문자 출력 흐름: Writer
하위 클래스: FileWriter
import java.io.FileWriter;
import java.io.IOException;

public class Demo03 {
    public static void main(String[] args) throws IOException {
        //       
        FileWriter fw=new FileWriter("D:\\java\\d.txt");
        //      
        fw.write(100);
        fw.flush();
        //       
        fw.write("   ");
        fw.flush();
        //        
        char[] ch={'a','1','r'};
        fw.write(ch);
        fw.flush();
        //    
        fw.close();
    }
}

5. Flush () 와 close () 의 차이 점:
flush (): 흐 르 는 버퍼 버퍼 의 데 이 터 를 목적지 에 리 셋 합 니 다. 리 셋 후 흐 르 는 데 이 터 는 계속 사용 할 수 있 습 니 다.(한 번 쓰 면 한 번 새로 고침 합 니 다. 데이터 가 너무 많 을 수 있 을 때 감당 하지 못 할 수도 있 습 니 다)
close (): 자원 을 닫 지만 닫 기 전에 버퍼 의 데 이 터 를 목적지 로 새로 고침 합 니 다. 그렇지 않 으 면 데 이 터 를 잃 어 버 리 고 흐름 을 닫 습 니 다.흐름 은 사용 할 수 없습니다.데 이 터 를 많이 쓰 면 반드시 쓰 면서 새로 고침 해 야 합 니 다. 마지막 으로 새로 고침 하지 않 고 close 에서 새로 고침 을 완료 하고 닫 을 수 있 습 니 다.
6. 파일 복사:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Copy {
    public static void main(String[] args) throws IOException {
        //     
        FileReader fr=new FileReader("D:\\java\\d.txt");
        //     
        FileWriter fw=new FileWriter("D:\\java\\d.txt");
        //    
        int len=0;
        while((len=fr.read())!=-1){
            fw.write(len);
            fw.flush();
        }
        fr.close();
        fw.close();
    }
}

 
다음으로 전송:https://www.cnblogs.com/21-forever/p/11030196.html

좋은 웹페이지 즐겨찾기