본문 바로가기

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

JAVA

스트림 - 바이트기반 스트림: FileInputStream/FileOutputStream ByteArrayInputStream/ByteArrayOutputStream PipedInputStream/PipedOutputStream AudioInputStream/AudioOutputStream

앞서 스트림과 입출력에 대해 배워봤다.

https://standout.tistory.com/106

 

스트림이란?

Stream 개울, 흘러가는것, 가는길 데이터를 운반하는데 사용되는 연결통로 https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%8A%B8%EB%A6%BC 스트림 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전.

standout.tistory.com

https://standout.tistory.com/53

 

표준입출력, System.in, System.out, System.err

I/O Input과 Output 입력과 출력, 입출력 컴퓨터 내부, 외부 장치와 프로그램간의 데이터를 주고받는것. 표준 스트림(standard streams) 컴퓨터 시스템의 기본 구성 요소 컴퓨터 프로그램과 그 환경(일반

standout.tistory.com

 

 

바이트단위로 데이터를 전송하는 입출력스트림에 대해 알아보자.

 

 

 

FileInputStream/FileOutputStream
이 클래스들은 파일에서 읽거나 파일로 쓰기 위해 사용.

// FileInputStream을 사용하여 파일에서 읽기
 FileInputStream inputStream = new FileInputStream("input.txt");
 int data;
 while ((data = inputStream.read()) != -1) {
 System.out.print((char) data);
 }
 inputStream.close();

 // FileOutputStream을 사용하여 파일에 쓰기
 FileOutputStream outputStream = new FileOutputStream("output.txt");
 String text = "안녕, 세계!";
 outputStream.write(text.getBytes());
 outputStream.close();

[출력결괴]
 // input.txt의 내용 (만약 "안녕, 세계!"가 들어있다고 가정)
 안녕, 세계!
 // 코드 실행 후 output.txt의 내용
 안녕, 세계!

 

 

 

ByteArrayInputStream/ByteArrayOutputStream
이 클래스들은 메모리 내 바이트 배열로부터 읽거나 메모리 내 바이트 배열로 쓰기 위해 사용.

 // ByteArrayOutputStream에 쓰기
 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
 String text = "안녕, 세계!";
 byteArrayOutputStream.write(text.getBytes());

 // ByteArrayInputStream에서 읽기
 ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
 int data;
 while ((data = byteArrayInputStream.read()) != -1) {
 System.out.print((char) data);
 }
 byteArrayInputStream.close();
 byteArrayOutputStream.close();

[출력결괴]
 안녕, 세계!

 

 

 

 

 

PipedInputStream/PipedOutputStream
이 클래스들은 두 스레드 간 통신을 제공합니다. 한 스레드의 출력을 다른 스레드의 입력으로 읽을 수 있습니다.

 // 파이프드 스트림 생성
 PipedOutputStream pipedOutputStream = new PipedOutputStream();
 PipedInputStream pipedInputStream = new PipedInputStream();

 // 입력과 출력 스트림 연결
 pipedOutputStream.connect(pipedInputStream);

 // PipedOutputStream에 쓰기
 String message = "안녕, 세계!";
 pipedOutputStream.write(message.getBytes());

 // PipedInputStream에서 읽기
 int data;
 while ((data = pipedInputStream.read()) != -1) {
 System.out.print((char) data);
 }
 
 // 스트림 닫기
 pipedOutputStream.close();
 pipedInputStream.close();

[출력결괴]
 안녕, 세계!

 

 

 

 

AudioInputStream/AudioOutputStream
이 클래스들은 오디오 데이터를 읽거나 쓰기 위해 사용.

아래 예시코드는 Java Sound API를 사용하여 오디오 파일을 읽고 쓰는 방법이다.

import javax.sound.sampled.*;
import java.io.*;

public class AudioExample {
    public static void main(String[] args) {
        try {
            // 읽을 오디오 파일 경로
            File inputFile = new File("input.wav");

            // AudioInputStream을 사용하여 오디오 파일 읽기
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(inputFile);
            AudioFormat format = audioInputStream.getFormat();
            byte[] audioData = new byte[(int) inputFile.length()];
            audioInputStream.read(audioData);

            // 오디오를 다른 형식으로 변환하거나 처리하는 등의 작업을 수행할 수 있습니다.
            // 여기서는 단순히 오디오 데이터를 출력합니다.
            System.out.println("Audio Data: " + audioData.length + " bytes");

            // 오디오 파일 쓰기
            File outputFile = new File("output.wav");
            AudioInputStream outputAudioInputStream = new AudioInputStream(
                    new ByteArrayInputStream(audioData), format, audioData.length);
            AudioSystem.write(outputAudioInputStream, AudioFileFormat.Type.WAVE, outputFile);
            outputAudioInputStream.close();

            System.out.println("Output file saved successfully.");

        } catch (UnsupportedAudioFileException | IOException e) {
            e.printStackTrace();
        }
    }
}