[Java] Byte기반 stream

Jeini·2023년 1월 14일
0

☕️  Java

목록 보기
49/59
post-thumbnail

💡 InputStream의 메서드


✔️ InputStream(바이트기반 입력스트림의 최고 조상)

스트림의 종류에 따라서 mark()reset() 을 사용하여 이미 읽은 데이터를 되돌려서 다시 읽을 수 있다.

int read(byte[] b) 활용 ➡️ [Java] inputStream byte[]

💡 OutputStream의 메서드


✔️ OutputStream(바이트기반 출력스트림의 최고 조상)의 메서드

❗️ flush()버퍼가 있는 출력스트림의 경우에만 의미가 있으며, OutputStream 에 정의된 flush() 는 아무런 일도 하지 않는다.

💡 ByteArrayInputStream / ByteArrayOutputStream


✔️ 바이트배열(byte[])에 데이터를 입출력하는 바이트기반 스트림

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class IOEx1 {
    public static void main(String[] args) {
        byte[] inSrc = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        byte[] outSrc = null;
        byte[] temp = new byte[4];

        ByteArrayInputStream input = new ByteArrayInputStream(inSrc);
        ByteArrayOutputStream output = new ByteArrayOutputStream();

        System.out.println("Input Source: " + Arrays.toString(inSrc));

        try{
            while (input.available() > 0) {
                // 읽은 데이터를 배열 temp에 담아서 개수를 반환한다.
                int length = input.read(temp);
                
                // temp에서 length만큼 write한다.
                output.write(temp, 0 , length);
                
                outSrc = output.toByteArray();
                printArrays(temp, outSrc);
            }
        } catch (IOException ie) {}
    }
    public static void printArrays(byte[] temp, byte[] outSrc) {
        System.out.println("temp: " + Arrays.toString(temp));
        System.out.println("Output Source: " + Arrays.toString(outSrc));
    }
}
Input Source: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
temp: [0, 1, 2, 3]
Output Source: [0, 1, 2, 3]
temp: [4, 5, 6, 7]
Output Source: [0, 1, 2, 3, 4, 5, 6, 7]
temp: [8, 9, 6, 7]
Output Source: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

output.write(temp, 0 , length); 부분에서 length를 적지 않으면 outSrc는 [0, 1, 2, 3, 4, 5, 6, 7, 8, 6, 7]이 된다.

보다 나은 성능을 위해서 temp 에 담긴 내용을 지우고 쓰는 것이 아니라 그냥 기존의 내용 위에 덮어쓰기 때문이다.

💡 FileInputStream / FileOutputStream


✔️ 파일(file)에 데이터를 입출력하는 바이트기반 스트림

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileViewer {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream(args[0]);
            FileOutputStream fos = new FileOutputStream(args[1]);

            int data = 0;

            while((data = fis.read()) != -1) {
                fos.write(data);
            }
            fis.close();
            fos.close();

        } catch (IOException e) {}
    }
}

References
: https://cafe.naver.com/javachobostudy

profile
Fill in my own colorful colors🎨

0개의 댓글