>  기사  >  Java  >  Java 고급 튜토리얼의 IO 기본 사항에 대한 자세한 설명

Java 고급 튜토리얼의 IO 기본 사항에 대한 자세한 설명

怪我咯
怪我咯원래의
2017-07-02 10:30:151504검색

이 글은 주로 Java Advanced Tutorial에서 IO의 기본을 소개합니다. 읽기, 쓰기 등의 작업을 포함한 Java IO에 대한 기본적인 소개입니다. 도움이 필요한 친구들이 참고할 수 있습니다.

컴퓨터의 가장 중요한 기능은 데이터를 처리합니다. 유용한 컴퓨터 언어는 처리되지 않은 데이터가 프로그램으로 유입되고 처리된 데이터가 유출되도록 우수한 IO 기능을 가져야 합니다.

다른 언어에 비해 Java의 IO 기능은 복잡합니다. 다른 언어에서는 많은 IO 기능(예: 파일 읽기)이 캡슐화되어 한두 줄의 프로그램으로 구현할 수 있습니다. Java에서 프로그래머는 파일 읽기를 위해 여러 수준의 장식이 필요한 경우가 많습니다.

상대적 복잡성의 이점은 IO의 유연성입니다. Java에서는 프로그래머가 IO의 전체 프로세스를 제어하여 최상의 IO 방법을 설계할 수 있습니다. 아래에서 더 자세히 살펴보겠습니다.

IO 예제

다음은 시연에 사용한 file.txt 파일입니다

Hello World!
Hello Nerd!

먼저 파일 읽기 예제를 살펴보겠습니다.

import java.io.*;

public class Test
{
  public static void main(String[] args)
  {
    try {
      BufferedReader br =
       new BufferedReader(new FileReader("file.txt")); 

      String line = br.readLine();

      while (line != null) {
        System.out.println(line);
        line = br.readLine();
      }
      br.close();
    }
    catch(IOException e) {
      System.out.println("IO Problem");
    }
  }
}

이 프로그램에는 try...catch... finally의 Exception이 포함되어 있습니다. 핸들러. 예외 처리에 대한 Java 고급 튜토리얼을 참조하세요

데코레이터 및 함수 조합

IO 프로그램의 핵심은 BufferedReader 객체를 생성하는 것입니다br:

  BufferedReader br = new BufferedReader(new FileReader("file.txt"));

생성 과정에서 먼저 FileReader 객체를 생성합니다. 이 기능은 "file.txt" 파일에서 바이트 스트림을 읽고 이를 텍스트 스트림으로 변환하는 것입니다. Java에서 표준 텍스트 인코딩은 유니코드입니다. BufferedReader()는 FileReader 객체를 수신하고, FileReader의 기능을 확장하고, 새로운 BufferedReader 객체를 생성합니다. 위에서 언급한 파일 읽기 및 변환 기능 외에도 이 개체는 캐시된 읽기(버퍼링) 기능도 제공합니다. 마지막으로 br 객체의 readLine() 메서드를 호출하여 파일을 한 줄씩 읽을 수 있습니다.

(캐시 읽기는 FileReader가 읽은 텍스트 스트림을 저장하는 캐시로 메모리 영역을 여는 것입니다. 캐시 내용을 읽을 때(예: readLine() 명령) 캐시는 후속 텍스트 스트림을 로드합니다. )

BufferedReader()는 기본 객체를 받아 더 복잡한 기능을 가진 장식된 객체를 반환하는 데코레이터입니다. 데코레이터의 장점은 다양한 객체를 장식하는 데 사용할 수 있다는 것입니다. 여기서 수정하는 것은 파일에서 읽은 텍스트 스트림입니다. 표준 입력, 네트워크 전송 스트림 등과 같은 다른 텍스트 스트림은 캐시된 읽기를 달성하기 위해 BufferedReader()로 수정될 수 있습니다.

다음 그림은 데이터가 아래에서 위로 흐르는 방식으로 br이 작동하는 방식을 보여줍니다.

위 장식 프로세스는 Linux의 텍스트 흐름 아이디어와 매우 유사합니다. Linux에서는 텍스트 스트림을 처리하고 전달하기 위해 함수형 접근 방식을 사용합니다. Java에서는 데코레이터를 사용합니다. 그러나 그 목적은 비슷합니다. 즉, 모듈화를 달성하고 기능의 자유로운 조합을 달성하는 것입니다.

더 많은 조합

실제로 Java는 다양한 데코레이터를 제공합니다. FileReader는 읽기와 변환의 두 단계를 결합하고 인코딩을 위한 유니코드와 같이 일반적으로 사용되는 기본 설정을 채택합니다. FileInputStream + InputStreamReader의 조합을 사용하여 FileReader를 대체할 수 있으므로 바이트 읽기 및 변환의 두 단계를 분리하고 두 프로세스를 더 효과적으로 제어할 수 있습니다.

(물론 FileReader가 사용하기 더 편리합니다. InputStreamReader는 유니코드 텍스트 처리를 위해 FileInputStream을 Reader로 변환합니다.)

화살표는 데이터 흐름 방향을 나타냅니다

스트림의 읽기 및 쓰기는 4개에서 나옵니다. 기본 클래스: InputStream, OutputStream, Reader 및 Writer. InputStream과 Reader는 읽기 작업을 처리하고, OutputStream과 Writer는 쓰기 작업을 처리합니다. 둘 다 java.io 패키지에 있습니다. 상속 관계는 다음과 같습니다.

java.io

또한 IOException에는 다음과 같은 파생 클래스가 있습니다.

IOException

Reader 및 Writer와 해당 파생 클래스는 유니코드 텍스트를 처리합니다. Buffered Reader, InputStreamReader 또는 FileReader를 참조하세요.

InputStream 및 OutputStream과 파생 클래스는 바이트 스트림을 처리합니다. 컴퓨터에 있는 데이터는 바이트 형식으로 간주할 수 있으므로, InputStream 및 OutputStream을 사용하여 더 넓은 범위의 데이터를 처리할 수 있습니다. 예를 들어 다음 조합을 사용하여 압축 파일에 포함된 데이터(예: 정수)를 읽을 수 있습니다.

箭头表示数据流动方向

 我们从压缩文件中读出字节流,然后解压缩,最终读出数据。

 写入

写入(write)操作与读取操作相似。我们可以通过使用装饰,实现复杂的写入功能。这里是一个简单的写入文本的例子:

import java.io.*;

public class Test
{
  public static void main(String[] args)
  {
    try {
      String content = "Thank you for your fish.";

      File file = new File("new.txt");

      // create the file if doesn't exists
      if (!file.exists()) {
        file.createNewFile();
      }

      FileWriter fw = new FileWriter(file.getAbsoluteFile());
      BufferedWriter bw = new BufferedWriter(fw);
      bw.write(content);
      bw.close();

    }
    catch(IOException e) {
      System.out.println("IO Problem");
    }
  }
}

上面创建了file对象,用于处理文件路径。

总结

这里只是对Java IO的基本介绍。Java的IO相对比较复杂。Java程序员需要花一些时间来熟悉java.io中的类及其功能。

위 내용은 Java 고급 튜토리얼의 IO 기본 사항에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.