앞서 스트림과 입출력에 대해 배워봤다.
https://standout.tistory.com/106
https://standout.tistory.com/53
바이트단위로 데이터를 전송하는 입출력스트림에 대해 알아보자.
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();
}
}
}