Java/stream
Java Stream - FileReader vs FileInputStream
S.T.Lee
2022. 11. 13. 11:55
java.io.fileReader - Character 파일을 읽을 수 있는 기능으로 인코딩 방식이 지정 가능하다.
java.io.FileInputStream - 파일로부터 바이트를 입력 받아 바이트 단위로 출력할 수 있는 클래스이다. 따라서 다양한 타입의 파일을 읽어올 수 있다.
//FileReader vs InputStream
package lec08.fileio04.second.stream.b;
import java.io.FileInputStream;
import java.io.FileReader;
public class FileInputStreamTest {
public static void main(String[] args) {
FileInputStream fileInputStream = null;
FileReader fileReader = null;
try {
fileInputStream = new FileInputStream("C:\\Users\\~~~.txt");
while (true) {
int read = fileInputStream.read();
if (read == -1) {
break;
}
char readChar = (char) read;
System.out.print(readChar);
}
fileReader = new FileReader("C:\\Users\\~~~.txt");
while (true) {
int read = fileReader.read();
if (read == -1) {
break;
}
char readChar = (char) read;
System.out.println(readChar);
}
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
if (fileInputStream != null) {
fileInputStream.close();
}
if (fileReader != null) {
fileReader.close();
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
둘의 차이로는 FileInputStream은 InputStream을 상속 받아 구현되어 바이트 단위로 처리하고, FileReader는 (Reader를 상속 받는) InputStreamReader를 상속 받아 구현되기에 문자 단위로 처리된다.
//FileInputStream에 대한 Java 내부 파일
public class FileInputStream extends InputStream
{
private static final int DEFAULT_BUFFER_SIZE = 8192;
private final String path;
private volatile FileChannel channel;
private final Object closeLock = new Object();
private volatile boolean closed;
public FileInputStream(String name) throws FileNotFoundException {
this(name != null ? new File(name) : null);
}
public class FileReader extends InputStreamReader {
public FileReader(String fileName) throws FileNotFoundException {
super(new FileInputStream(fileName));
}
public class InputStreamReader extends Reader {
private final StreamDecoder sd;
/**
* Creates an InputStreamReader that uses the
* {@link Charset#defaultCharset() default charset}.
*
* @param in An InputStream
*
* @see Charset#defaultCharset()
*/