CodeGym /행동 /자바 코어 /표준 인터페이스: InputStream, OutputStream

표준 인터페이스: InputStream, OutputStream

자바 코어
레벨 3, 레슨 8
사용 가능

"안녕하세요, 아미고! 이제 InputStream 과 OutputStream 이라는 두 가지 인터페이스에 대해 말씀드리겠습니다 . 그것들은 추상 클래스로 선언되지만 자세히 살펴보면 본질적으로 인터페이스라는 것을 알 수 있습니다 . 거의 모든 메서드는 추상입니다. 예외는 다음과 같습니다. 몇 가지 중요하지 않은 방법이 있습니다. 이전에 고려한 " 경호원 " 과 매우 유사합니다 ."

이들은 매우 흥미로운 인터페이스입니다. 지금은 의도적으로 그것들을 인터페이스 라고 부르겠습니다 . 왜 우리가 그것들이 필요한지 이해하실 것입니다. 그런 다음 이들이 실제로 추상 클래스인 이유에 대해 이야기하겠습니다.

"좋아요. 그렇다면 이 인터페이스는 무엇입니까?"

"더 고민하지 않고 말씀드리겠습니다."

Java에는 « 스트림 »이라는 흥미로운 기능이 있습니다. 스트림은 매우 단순한 엔터티입니다. 그리고 그 단순성은 데이터를 교환하는 매우 강력한 방법의 핵심입니다. 스트림에는 읽기용 스트림과 쓰기용 스트림 의 두 가지 유형이 있습니다 .

이미 짐작하셨겠지만 쓰기를 위해 데이터를 스트림 에 쓸 수 있습니다 . 이를 위한 쓰기 방법 이 있습니다 . 읽기 위해 스트림 에서 데이터를 읽을 수 있습니다 . 이를 위한 read () 메서드 가 있습니다 .

InputStream  은 읽기를 지원하는 스트림의 인터페이스입니다. 그것은 다음 능력을 정의합니다: «나에게서 바이트를 읽을 수 있습니다».

마찬가지로 OutputStream 은 쓰기를 지원하는 스트림의 인터페이스입니다. 그것은 다음 능력을 정의합니다: «bytes can be write to me».

"그게 다야?"

"대단히 그렇습니다. 하지만 요점은 Java에 InputStream 및 OutputStream 과 함께 작동할 수 있는 많은 클래스 가 있다는 것입니다. 예를 들어 디스크에서 파일을 읽고 그 내용을 화면에 표시하려고 합니다. 이보다 더 쉬울 수는 없습니다."

디스크의 파일에서 데이터를 읽기 위해 InputStream 인터페이스를 구현하는 특수 FileInputStream 클래스가 있습니다 . 이 데이터를 다른 파일에 쓰시겠습니까? 이를 위해 OutputStream 인터페이스를 구현하는 FileOutputStream 클래스가 있습니다 . 다음 코드는 한 파일에서 다른 파일로 데이터를 복사하기 위해 수행해야 하는 작업을 보여줍니다.

암호
public static void main(String[] args) throws IOException
{
 InputStream inStream = new FileInputStream("c:/source.txt");
 OutputStream outStream = new FileOutputStream("c:/result.txt");

 while (inStream.available() > 0)
 {
  int data = inStream.read(); //read one byte from the input stream
  outStream.write(data); //write that byte to the other stream.
 }

 inStream.close(); //close the streams
 outStream.close();
}

클래스를 작성하고  여기에 InputStream  및  OutputStream 기능을 추가했다고 상상해 보십시오.

이러한 인터페이스를 제대로 구현했다면 이제 클래스의 인스턴스를 파일에 저장하거나 파일에서 읽을 수 있습니다. read 메서드를 사용하여 내용을 읽기만 하면 됩니다 . 또는 개체를 만들고 write 메서드를 사용하여 파일 내용을 작성하여 파일에서 로드할 수 있습니다.

"예를 들어?"

"확신하는."

암호 설명
class MyClass
{
private ArrayList<Integer> list;
}
간단히 하기 위해 우리 클래스에 정수를 포함하는 ArrayList라는 하나의 개체가 포함되어 있다고 상상해 보십시오.

이제 읽기 및 쓰기 메서드를 추가합니다.

암호 설명
class MyClass
{
private ArrayList<Integer> list;
public void write(int data)
{
list.add(data);
}
public int read()
{
int first = list.get(0);
list.remove(0);
return first;
}

public int available()
{
return list.size();
}
}
이제 우리 클래스는 list 의 전체 내용을 순차적으로 읽을 수 있도록 하는 read 메서드를 구현합니다 .

그리고 목록에 값을 쓸 수 있는 write 메소드가 있습니다.

물론 이것은 InputStream 및 OutputStream 인터페이스의 구현은 아니지만 매우 유사합니다.

"예, 알겠습니다. 그러면 그러한 개체의 내용을 파일에 어떻게 저장합니까?"

"예를 들어 보겠습니다."

파일에 MyClass 객체 쓰기
public static void main(String[] args)
{
 MyClass myObject = new MyClass();
 OutputStream outStream = new FileOutputStream ("c:/my-object-data.txt");

 while (myObject.available() > 0)
 {
  int data = myObject.read(); //read one int from the input stream
  outStream.write(data); //write that int to the other stream.
 }

 outStream.close();
}
파일에서 MyClass 객체 읽기
public static void main(String[] args)
{
 InputStream inStream = new FileInputStream("c:/my-object-data.txt");
 MyClass myObject = new MyClass();

 while (inStream.available() > 0)
 {
  int data = inStream.read(); //read one int from the input stream
  myObject.write(data); //write that int to the other stream.
 }

 inStream.close(); //close the streams
}

"이런 몰리! 정말 InputStream/OutputStream으로 작업하는 것과 매우 유사합니다. 스트림이 훌륭합니다!"

"다음 몇 가지!"

3
과제
자바 코어, 레벨 3, 레슨 8
잠금
Code entry
Sometimes you don't need to think, you just need to hammer it out! As paradoxical as it may seem, sometimes your fingers will "remember" better than your conscious mind. That's why while training at the secret CodeGym center you will sometimes encounter tasks that require you to enter code. By entering code, you get used to the syntax and assimilate some material. What's more, you combat laziness.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION