언어 및 도구들 공부/Java

Stream, Java의 byte 타입 데이터와 1Byte

Dr.Mlem 2024. 9. 28. 11:33

Q1.
수업중에, 저장할 내용을 스트림으로 바꾼 배열 이라는 말이 있었는데, 여기서 스트림이 뭐길래 저장할 내용을 바꿨다고 하는건지 설명해줘



(참조한 내용 -> 28단원 실습 1~4번 코드)
스트림(Stream)은 데이터를 순차적으로 읽거나 쓰는 데 사용되는 추상화된 개념입니다. 스트림은 데이터를 바이트 단위로 처리하며, 파일, 네트워크 소켓, 메모리 등 다양한 입력 및 출력 소스와 목적지에 대해 동일한 방식으로 데이터를 처리할 수 있게 해줍니다.

 

스트림의 종류
입력 스트림(InputStream): 데이터를 읽어들이는 스트림입니다. 예를 들어, 파일에서 데이터를 읽어오는 FileInputStream이 있습니다.
출력 스트림(OutputStream): 데이터를 쓰는 스트림입니다. 예를 들어, 파일에 데이터를 쓰는 FileOutputStream이 있습니다.
스트림의 역할
스트림은 데이터를 바이트 단위로 처리하기 때문에, 파일이나 네트워크 소켓과 같은 다양한 데이터 소스와 목적지에 대해 일관된 방식으로 데이터를 읽고 쓸 수 있습니다. 이를 통해 개발자는 데이터 소스나 목적지에 상관없이 동일한 방식으로 데이터를 처리할 수 있습니다.

예제 설명
주어진 코드에서 OutputStream을 사용하여 파일에 데이터를 쓰는 과정을 설명하겠습니다.


public void write(String filePath, byte[] data) throws Exception {
    OutputStream os = null;
    try {
        // 저장할 파일 스트림 생성
        os = new FileOutputStream(filePath);
        // 파일에 데이터 쓰기
        os.write(data);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        throw e;
    } catch (IOException e) {
        e.printStackTrace();
        throw e;
    } finally {
        if (os != null) {
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

코드 설명
파일 스트림 생성: new FileOutputStream(filePath)를 통해 파일에 데이터를 쓸 수 있는 출력 스트림을 생성합니다.
데이터 쓰기: os.write(data)를 통해 바이트 배열 형태의 데이터를 파일에 씁니다. 여기서 data는 파일에 저장할 내용을 바이트 배열로 변환한 것입니다.
스트림 닫기: finally 블록에서 스트림을 닫아 자원을 해제합니다. 스트림을 닫지 않으면 파일이 계속 사용 중인 상태가 되어 다른 프로그램이 접근할 수 없게 됩니다.
바이트 배열로 변환하는 이유
파일에 데이터를 쓰기 위해서는 데이터를 바이트 단위로 처리해야 합니다. 따라서 문자열이나 다른 형태의 데이터를 파일에 쓰기 전에 바이트 배열로 변환해야 합니다. 예를 들어, 문자열을 파일에 쓰기 위해서는 문자열을 바이트 배열로 변환한 후, 이 바이트 배열을 출력 스트림을 통해 파일에 씁니다.

이렇게 스트림을 사용하면 파일 입출력 작업을 효율적으로 처리할 수 있습니다.


Q2.
바이트 단위라는게, 진짜 8비트의 그 바이트고, java에서의 byte 타입이 아닌거지?



아니요, 여기서 말하는 바이트 단위는 실제로 8비트의 바이트를 의미하며, Java의 byte 타입과 동일합니다. Java에서 byte 타입은 8비트 크기의 정수를 나타내며, -128부터 127까지의 값을 가질 수 있습니다.

바이트 단위와 byte 타입
바이트 단위: 컴퓨터에서 데이터를 처리하는 최소 단위로, 8비트로 구성됩니다.
Java의 byte 타입: 8비트 크기의 정수형 데이터 타입으로, -128부터 127까지의 값을 가질 수 있습니다.
예제 설명
주어진 코드에서 byte[] data는 파일에 저장할 데이터를 바이트 배열로 나타낸 것입니다. 이 바이트 배열은 파일에 데이터를 쓰기 위해 사용됩니다.

public void write(String filePath, byte[] data) throws Exception {
    OutputStream os = null;
    try {
        // 저장할 파일 스트림 생성
        os = new FileOutputStream(filePath);
        // 파일에 데이터 쓰기
        os.write(data);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        throw e;
    } catch (IOException e) {
        e.printStackTrace();
        throw e;
    } finally {
        if (os != null) {
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

바이트 배열로 변환하는 이유
파일에 데이터를 쓰기 위해서는 데이터를 바이트 단위로 처리해야 합니다. 예를 들어, 문자열을 파일에 쓰기 위해서는 문자열을 바이트 배열로 변환한 후, 이 바이트 배열을 출력 스트림을 통해 파일에 씁니다.

String text = "Hello, World!";
byte[] data = text.getBytes("UTF-8"); // 문자열을 바이트 배열로 변환
fileHelper.write("example.txt", data); // 바이트 배열을 파일에 쓰기

이렇게 하면 문자열이 바이트 배열로 변환되어 파일에 저장됩니다. 바이트 배열로 변환하는 이유는 파일 입출력 작업이 바이트 단위로 이루어지기 때문입니다.

 

Q3.
java에서의 바이트 타입은 진짜 그 8bit로 구성되는 1byte와 동일한거야?



네, 맞습니다. Java에서의 byte 타입은 실제로 8비트로 구성된 1바이트와 동일합니다. byte 타입은 8비트 크기의 정수형 데이터 타입으로, -128부터 127까지의 값을 가질 수 있습니다. 이는 컴퓨터에서 데이터를 처리하는 최소 단위인 바이트와 동일합니다.

Java의 byte 타입
크기: 8비트 (1바이트)
값의 범위: -128부터 127까지
예제
다음은 byte 타입을 사용하는 간단한 예제입니다:

public class ByteExample {
    public static void main(String[] args) {
        byte b = 100; // 100은 8비트로 표현 가능한 값
        System.out.println("Byte value: " + b);
    }
}

바이트 배열
파일 입출력 작업에서 자주 사용되는 바이트 배열은 byte 타입의 배열입니다. 예를 들어, 파일에 문자열을 저장하기 위해 문자열을 바이트 배열로 변환한 후, 이 바이트 배열을 파일에 씁니다.

public class FileHelper {
    public void write(String filePath, byte[] data) throws Exception {
        OutputStream os = null;
        try {
            os = new FileOutputStream(filePath);
            os.write(data);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            throw e;
        } catch (IOException e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        FileHelper fileHelper = new FileHelper();
        String text = "Hello, World!";
        try {
            byte[] data = text.getBytes("UTF-8"); // 문자열을 바이트 배열로 변환
            fileHelper.write("example.txt", data); // 바이트 배열을 파일에 쓰기
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

이 예제에서 text.getBytes("UTF-8") 메서드는 문자열을 UTF-8 인코딩을 사용하여 바이트 배열로 변환합니다. 그런 다음, 이 바이트 배열을 write 메서드를 사용하여 파일에 씁니다.

따라서, Java의 byte 타입은 실제로 8비트로 구성된 1바이트와 동일하며, 파일 입출력 작업에서 중요한 역할을 합니다.

'언어 및 도구들 공부 > Java' 카테고리의 다른 글

buffer 4  (0) 2024.09.28
Stream 2  (0) 2024.09.28
JSON 구조와 Java 클래스 구조  (0) 2024.09.27
try-catch와 throw 구문  (0) 2024.09.27
Maven을 이용한 Java 프로젝트 경로상의 대문자 사용  (0) 2024.09.27