본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

문자기반스트림 Reader의 메서드 close() mark() markSupported() read() ready() skip()

앞서 바이트기반 스트림에 대해 배웠다.

https://standout.tistory.com/1470

 

스트림 - 바이트기반 스트림: FileInputStream/FileOutputStream ByteArrayInputStream/ByteArrayOutputStream PipedInputStr

앞서 스트림과 입출력에 대해 배워봤다. https://standout.tistory.com/106 스트림이란? Stream 개울, 흘러가는것, 가는길 데이터를 운반하는데 사용되는 연결통로 https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%8A%B8%EB%A6%

standout.tistory.com

https://standout.tistory.com/1477

 

바이트기반 파일입출력 스트림 FileInputStream FileOutputStream, String File boolean FileDescriptor

FileInputStream(String name) 이 생성자는 파일 이름을 받아들여 해당 파일에 대한 입력 스트림을 연다. try { FileInputStream fis = new FileInputStream("example.txt"); // 파일에서 데이터를 읽는 작업 수행 fis.close(); }

standout.tistory.com

 

 

그중 InputStream과 OutputStream은 바이트기반 스트림의 조상이었는데, 

https://standout.tistory.com/1473

 

바이트기반스트림 InputStream메서드 available() close() markSupported() mark() reset() read() skip()

InputStream과 OutputStream은 모든 바이트기반 스트림의 조상이다. https://standout.tistory.com/1470 스트림 - 바이트기반 스트림: FileInputStream/FileOutputStream ByteArrayInputStream/ByteArrayOutputStream PipedInputStr 앞서 스

standout.tistory.com

https://standout.tistory.com/1474

 

바이트기반스트림 OutputStream의 메서드 close() flush() write()

InputStream과 OutputStream은 모든 바이트기반 스트림의 조상이다. https://standout.tistory.com/1470 스트림 - 바이트기반 스트림: FileInputStream/FileOutputStream ByteArrayInputStream/ByteArrayOutputStream PipedInputStr 앞서 스

standout.tistory.com

 

 

Reader Writer또한 문자기반 스트림에서 같은역할을 한다고 이해하자.

아래는 Reader의 메서드이다.

byte배열대신 char배열을 사용한다는 것 외에는 다르지않다.

 


abstract void close(): 스트림을 닫는다.
void mark(int readlimit): 현재 위치를 표시하고 나중에 `reset()` 메서드를 호출해 돌아갈 수 있도록 한다.
boolean markSupported(): `mark()` 및 `reset()` 메서드의 지원 여부를 나타낸다.
int read(): 한 문자를 읽고 해당 문자의 ASCII 값을 반환한다.
int read(char[] c): 주어진 문자 배열에 데이터를 읽고, 읽은 문자 수를 반환한다.
abstract int read(char[] c, int off, int len): 주어진 길이만큼 문자를 읽고, 시작 오프셋부터 읽은 문자 수를 반환한다.
int read(CharBuffer target): 문자 버퍼로부터 문자를 읽고, 읽은 문자 수를 반환한다.
boolean ready(): 스트림이 읽을 수 있는지 여부를 나타내는 값을 반환한다.
long skip(long n): 지정된 수의 문자를 건너뛴다.

import java.io.*;

public class FileReaderExample {
    public static void main(String[] args) {
        try {
            // 파일에서 데이터를 읽기 위한 FileReader 생성
            FileReader reader = new FileReader("data.txt");

            // markSupported() 메서드를 사용하여 mark()와 reset() 메서드의 지원 여부 확인
            boolean isMarkSupported = reader.markSupported();
            System.out.println("Mark Supported: " + isMarkSupported);

            // mark() 메서드를 사용하여 현재 위치 표시
            reader.mark(100);

            // read() 메서드를 사용하여 한 문자씩 읽어 출력
            System.out.println("Reading characters one by one:");
            int data;
            while ((data = reader.read()) != -1) {
                System.out.print((char) data);
            }
            System.out.println(); // 줄바꿈

            // reset() 메서드를 사용하여 이전에 표시한 위치로 돌아가기
            reader.reset();

            // read(char[] c) 메서드를 사용하여 문자 배열에 데이터 읽기
            char[] buffer = new char[10];
            int numChars = reader.read(buffer);
            System.out.println("\nReading characters into buffer:");
            System.out.println(buffer); // 문자 배열 전체 출력
            System.out.println("Number of characters read: " + numChars);

            // read(char[] c, int off, int len) 메서드를 사용하여 일부 문자 읽기
            int offset = 3;
            int length = 5;
            char[] partialBuffer = new char[length];
            int partialChars = reader.read(partialBuffer, offset, length);
            System.out.println("\nReading partial characters into buffer:");
            System.out.println(partialBuffer); // 일부 문자열 출력
            System.out.println("Number of partial characters read: " + partialChars);

            // ready() 메서드를 사용하여 스트림이 읽을 수 있는지 확인
            boolean isReady = reader.ready();
            System.out.println("\nIs reader ready? " + isReady);

            // skip(long n) 메서드를 사용하여 지정된 수의 문자를 건너뛰기
            long charsSkipped = reader.skip(5);
            System.out.println("\nSkipped characters: " + charsSkipped);

            // 스트림 닫기
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

[출력결과]
Mark Supported: true
Reading characters one by one:
This is some text.
Reading characters into buffer:
This is so
Number of characters read: 10

Reading partial characters into buffer:
 s so
Number of partial characters read: 5

Is reader ready? true

Skipped characters: 5