자바 IO 바이트 흐름 상세 설명 및 인 스 턴 스 코드

자바 IO 바이트 흐름 상세 설명
1.         어떻게 입 출력 흐름 을 이해 합 니까?
이것 은 제 가 처음에 자바 IO 라 는 이해 하기 어 려 운 부분 을 배 웠 습 니 다.입 출력 흐름 은 우 리 는 반드시 하 나 를 참고 물 로 해 야 합 니 다.우 리 는 메모 리 를 참고 물 로 합 니 다.메모리 에 기 록 된 우 리 는 입력 흐름 이 라 고 하고 메모리 에서 기 록 된 우 리 는 출력 흐름 이 라 고 합 니 다.아래 의 예시 도 를 보시오

이런 개념 이 생 겼 습 니 다. 
2.         흐름 의 분 류 를 다시 보다.
흐 르 는 분류,자바 의 흐 르 는 분류 가 비교적 풍부 하여 방금 접촉 한 사람 이 보면 매우 어지럽다.흐름 분류 방식 은 매우 많다.
1.입력 방향 에 따라 입력 흐름 과 출력 흐름,입력 출력의 참조 대상 은 자바 프로그램 입 니 다.(InputStream OutPutStream)
2.데 이 터 를 처리 하 는 단위 에 따라 바이트 흐름 과 문자 흐름,바이트 흐름 이 읽 는 가장 작은 단 위 는 하나의 바이트(1byte=8bit)이 고 문자 흐름 은 한 번 에 한 글자(1char=2byte=16bit)를 읽 을 수 있 습 니 다.(InputStream Reader)
3.기능 에 따라 분 절 점 흐름 과 처리 흐름,노드 흐름 은 하나의 소스 에서 데 이 터 를 읽 고 쓰 는 흐름(이 흐름 은 포장 과 수식 을 거치 지 않 음)입 니 다.처리 흐름 은 노드 흐름 에 대한 패 키 징 을 바탕 으로 하 는 흐름 입 니 다.FileInputStream 은 하나의 접점 흐름 으로 파일 에서 데 이 터 를 직접 읽 을 수 있 지만 Buffered InputStream 은 FileInputStream 을 포장 할 수 있 습 니 다.버퍼 기능 이 있 습 니 다.FileInputStream BufferedInputStream)
사실은 상기 세 가지 분 류 를 제외 하고 자주 듣 는 분류 도 있다.예 를 들 어 대상 흐름,버퍼 흐름,압축 흐름,파일 흐름 등 이다.사실은 모두 노드 흐름 과 처리 흐름 의 하위 분류 이다.물론 필요 하 다 면 새로운 흐름 유형 을 만 들 수도 있 습 니 다.
3.         바이트 흐름:
바이트 흐름 은 주로 byte 형식 데 이 터 를 조작 합 니 다.byte 배열 을 기준 으로 주요 작업 류 는 InputStream(바이트 입력 흐름),OutputSteam(바이트 출력 흐름)이 있 습 니 다.IputStream 과 OutputStream 은 모두 추상 적 인 유형 이기 때문에 이 두 가지 유형 을 사용 하려 면 먼저 하위 클래스 를 통 해 예화 대상 을 사용 해 야 합 니 다.다음은 이 두 가지 유형의 일부 하위 구조 도 이다. 
 
1)        바이트 출력 흐름:출력 스 트림
OutputStream 은 추상 적 인 클래스 입 니 다.사용 하려 면 하위 클래스 를 통 해 예화 해 야 합 니 다. 
OutputStream 류 의 상용 방법
방법 이름
묘사 하 다.
public void close() throws IOException
출력 흐름 닫 기
public void flush() throws IOException
버퍼 새로 고침
public void write(byte[] b) throws IOException
byte 배열 을 데이터 흐름 에 기록 합 니 다.
public void write(byte[] b,int off,int len) throws IOException
지정 한 범위 의 byte 배열 을 데이터 흐름 에 기록 합 니 다.
public abstract void write(int b) throws IOException
바이트 데 이 터 를 데이터 흐름 에 기록 합 니 다.
  
인 스 턴 스 1:Hello World 부터
기능:("Hello.txt"라 는 텍스트 파일 에"Hello World"라 고 쓰기) 

public static void main(String[] args) throws Exception { 
 
  //                “helloworld.txt”      
 
  File file = new File("hellowolrd.txt"); 
 
  OutputStream outputStream = null; 
 
  //   FileOutPutStream      OutputStream   
 
  outputStream = new FileOutputStream(file); 
 
  //         
 
  String str = "hello,world"; 
 
  //             
 
  byte[] b = str.getBytes(); 
 
  //      
 
  outputStream.write(b); 
 
  //       
 
  outputStream.close(); 
 
  outputStream.flush(); 
 
} 
현재 프로젝트 디 렉 터 리 아래 에 helloworld.txt 가 있 고 데이터 가 있 는 것 을 볼 수 있 습 니 다.str 의 값 을 바 꾸 면 텍스트 파일 의 데이터 도 바 뀌 기 때문에 원래 의 데 이 터 를 삭제 하지 않 고 추적 끝 에 추가 할 수 있 는 지 생각 합 니 다.
우 리 는 FileOutputStream 대상 을 구성 할 때 다른 구조 방법 을 선택 하면 된다.
FileOutputStream(File file,boolean append)
두 번 째 매개 변 수 는 텍스트 파일 에 추가 로 기록 할 지 여부 입 니 다.
위의 코드 를 수정 하면 됩 니 다.
outputStream = new FileOutputStream(file,true);
 다시 예 1 에서 우 리 는 입 출력 흐름 에 대한 이 해 를 이해한다.이 예 에서 우리 가 설명 한 문자열 은 틀림없이 메모리 에 있 을 것 이다.지금 우 리 는 메모리 에서 데 이 터 를 텍스트 에 써 야 하기 때문에 출력 흐름 을 사용한다.이것 도 제 가 입 출력 흐름 에 대한 이해 에 부합 되 고 물론 다른 이해 방식 이 있 을 것 입 니 다.
2)        바이트 입력 흐름:InputStream
 InputStream 클래스 의 일반적인 방법
방법 이름
묘사 하 다.
public void avaliable() throws IOException
입력 파일 의 크기 를 가 져 올 수 있 습 니 다.
public void close() throws IOException
입력 흐름 닫 기
public abstract int read() throws IOException
내용 읽 기,숫자 로 읽 기
public int read (byte b) throws IOException
내용 을 byte 배열 로 읽 고 읽 은 개 수 를 되 돌려 줍 니 다.
OutputStream 류 와 마찬가지 로 InputStream 자체 도 추상 적 인 유형 이 므 로 사용 하려 면 하위 클래스 에 의존 해 야 합 니 다.
실례 2:아니면 HelloWorld
이전 예 를 바탕 으로 텍스트 에서 데 이 터 를 읽 고 콘 솔 에 표시 합 니 다.

public static void main(String[] args) throws Exception { 
 
    //                “helloworld.txt”      
 
    //                ,         
 
    File file = new File("hellowolrd.txt"); 
 
    //   InputStream   
 
    InputStream inputStream = null; 
 
    //   FileInputStream     InputStream   
 
    inputStream = new FileInputStream(file); 
 
    //                   
 
    byte[] b = new byte[1024]; 
 
    //       ,            
 
    inputStream.read(b); 
 
    //       
 
    inputStream.close(); 
 
    //        
 
    System.out.println(new String(b)); 
 
  } 
이런 식 으로 인쇄 하면 콘 솔 에 텍스트 파일 의 내용 이 인쇄 되 어 있 지만 뒤에 빈 칸 이 많이 따라 다 니 는 것 을 볼 수 있 습 니 다.이것 은 우리 가 필요 로 하지 않 는 것 입 니 다.이런 상황 에 대해 우 리 는 두 가지 해결 방법 이 있 습 니 다.
방식 1:바이트 배열 을 설명 할 때 바이트 배열 의 길 이 를 텍스트 내용 의 길이 로 지정 합 니 다.
byte[] b=new byte[(int)file.length()]; 
방식 2:바이트 배열 을 문자열 로 변환 하 는 호출 String(byte b,int off,int len)이라는 구조 함수
System.out.println(new String(b,0,(int)file.length()));
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기