java面试题网

普通会员

257

帖子

9

回复

151

积分

楼主
发表于 2018-03-22 09:30:09 | 查看: 673| 回复: 1

(1)字节流 InputStream/OutputStream

 ①FileInputStream/FileOutputStream:文件字节流,用于文件的读写操作

 ②BufferedInputStream/BufferedFileOutputStream:加缓冲区的字节流,用于提高效率

(2)字符流 Reader/Writer

 ①FileReader/FileWriter:文件字符流,用于文本文件的读写操作

 ②BufferedReader/BufferedWriter:加缓冲区的字符流,用于提高效率

(3)转换流 InputStreamReader/OutputStreamWriter



普通会员

216

帖子

75

回复

160

积分
沙发
发表于 2019-05-05 14:49:46

Java 中有几种类型的流?
两种流分别是字节流,字符流。
字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。在java.io 包中还有许多其他的流,主要是为了提高性能和使用方便。
补充:关于Java的IO需要注意的有两点:一是两种对称性(输入和输出的对称性,字节和字符的对称性);二是两种设计模式(适配器模式和装潢模式)。另外Java中的流不同于C#的是它只有一个维度一个方向。
补充:下面用IO和NIO两种方式实现文件拷贝,这个题目在面试的时候是经常被问到的。
public class MyUtil {
private MyUtil() {
throw new AssertionError();
}

public static void fileCopy(String source, String target) throws IOException {
try (InputStream in = new FileInputStream(source)) {
try (OutputStream out = new FileOutputStream(target)) {
byte[] buffer = new byte[4096];
int bytesToRead;
while((bytesToRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
}
}
}

public static void fileCopyNIO(String source, String target) throws IOException {
try (FileInputStream in = new FileInputStream(source)) {
try (FileOutputStream out = new FileOutputStream(target)) {
FileChannel inChannel = in.getChannel();
FileChannel outChannel = out.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(4096);
while(inChannel.read(buffer) != -1) {
buffer.flip();
outChannel.write(buffer);
buffer.clear();
}
}
}
}
}
注意:上面用到Java 7的TWR,使用TWR后可以不用在finally中释放外部资源 ,从而让代码更加优雅。

您需要登录后才可以回帖 登录 | 立即注册

java面试题网无聊看看网与java建站系统提供技术支持V2.1 网站地图 © 2016-2018