A stream is a sequence of data. A program uses an input stream to read data from a source, one item at a time: A program uses an output stream to write data to a destination, one item at time:
// 자바의 정석 예제 (15-1)
public class ByteArrayStreamPractice1 {
public static void main(String[] args) {
byte[] inSrc = {0,1,2,3,4,5,6,7,8,9};
byte[] outSrc = null;
ByteArrayInputStream input = new ByteArrayInputStream(inSrc);
ByteArrayOutputStream output = new ByteArrayOutputStream();
int data = 0;
while((data = input.read()) != -1) {
output.write(data);
}
outSrc = output.toByteArray();
System.out.println(Arrays.toString(inSrc));
System.out.println(Arrays.toString(outSrc));
}
}
https://blog.naver.com/swoh1227/222237603565
자바의 정석
Reader
와 Writer
의 후손이다. https://docs.oracle.com/javase/tutorial/essential/io/charstreams.html
public class CopyCharacters {
public static void main(String[] args) throws IOException {
FileReader inputStream = null;
FileWriter outputStream = null;
try {
inputStream = new FileReader("xanadu.txt");
outputStream = new FileWriter("characteroutput.txt");
int c;
while ((c = inputStream.read()) != -1) {
outputStream.write(c);
}
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
}
}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.IOException;
public class CopyLines {
public static void main(String[] args) throws IOException {
BufferedReader inputStream = null;
PrintWriter outputStream = null;
try {
inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new PrintWriter(new FileWriter("characteroutput.txt"));
String l;
while ((l = inputStream.readLine()) != null) {
outputStream.println(l);
}
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
}
}
https://docs.oracle.com/javase/tutorial/essential/io/buffers.html
buffer
라고 불리는 메모리 영역에서 데이터를 읽는다. BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
BufferedInputStream
BufferedOutputStream
은 buffered된 바이트 스트림을 생성한다는 것, BufferedReader
BufferedWriter
는 buffered된 character 스트림을 생성한다는 것 inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));
flushing
한다고 한다. autoflush
를 제공한다.autoflush
가 가능하면 특정 키 이벤트가 buffer를 flushed되게 할 수 있다. PrintWriter
는 println
이나 format
이 호출될 때마다 buffer가 flush한다. flush()
메서드를 호출하면 된다. 어떤 putout 스트림에서도 사용 가능하지만 buffered된 스트림에서만 유효하다. InputStreamReader cin = new InputStreamReader(System.in);
package bongf.week13.study;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FilePractice {
public static void main(String[] args) throws IOException {
// file 경로로 fileInputStream,outputStream을 생성한다
FileInputStream fileToIn = new FileInputStream("c:\\java2\\file_practice\\test.txt");
FileOutputStream fileToOut = new FileOutputStream("c:\\java2\\file_practice\\fileout.txt", true);
int data = 0;
while ((data = fileToIn.read()) != -1) {
fileToOut.write(data);
}
fileToIn.close();
fileToOut.close();
}
}
package bongf.week13.study;
import java.io.*;
public class FilePractice2 {
public static void main(String[] args) throws IOException {
FileReader fileReader = new FileReader( "c:\\java2\\file_practice\\test.txt");
FileWriter fileWriter = new FileWriter("c:\\java2\\file_practice\\fileout.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
String line = "";
for (int i =1; (line = bufferedReader.readLine()) != null; i++) {
System.out.println(line);
bufferedWriter.write(line);
}
bufferedReader.close();
bufferedWriter.close();
}
}
http://tutorials.jenkov.com/java-nio/nio-vs-io.html
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class ChannelPractice {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("c:\\java2\\file_practice\\test.txt");
FileOutputStream fileOutputStream = new FileOutputStream("c:\\java2\\file_practice\\fileout.txt");
ByteBuffer buffer = ByteBuffer.allocateDirect(20); // 우선 버퍼가 할당 되어야 한다. 그리고 나서 read()의 결과가 buffer에 써진다.
FileChannel channelIn = fileInputStream.getChannel();
FileChannel channelOut = fileOutputStream.getChannel();
channelIn.read(buffer); // FileChannel로부터 데이터를 읽으려면 read()
buffer.flip(); //read모드였던 버퍼를 write모드로 flip
channelOut.write(buffer);
}
}