IO // NIO 实现方式比较

来源:互联网 发布:西安环境监测数据造假 编辑:程序博客网 时间:2024/05/21 05:18

69、Java 中有几种类型的流?

答:字节流,字符流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。在java.io 包中还有许多其他的流,主要是为了提高性能和使用方便。

补充:关于Java的IO需要注意的有两点:一是两种对称性(输入和输出的对称性,字节和字符的对称性);二是两种设计模式(适配器模式和装潢模式)。另外Java中的流不同于C#的是它只有一个维度一个方向。

补充:下面用IO和NIO两种方式实现文件拷贝,这个题目在面试的时候是经常被问到的。

[java] view plaincopy
  1. package com.lovo;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8. import java.nio.ByteBuffer;  
  9. import java.nio.channels.FileChannel;  
  10.   
  11. public class MyUtil {  
  12.   
  13.     private MyUtil() {  
  14.         throw new AssertionError();  
  15.     }  
  16.       
  17.     public static void fileCopy(String source, String target) throws IOException {  
  18.         try (InputStream in = new FileInputStream(source)) {  
  19.             try (OutputStream out = new FileOutputStream(target)) {  
  20.                 byte[] buffer = new byte[4096];  
  21.                 int bytesToRead;  
  22.                 while((bytesToRead = in.read(buffer)) != -1) {  
  23.                     out.write(buffer, 0, bytesToRead);  
  24.                 }  
  25.             }  
  26.         }  
  27.     }  
  28.       
  29.     public static void fileCopyNIO(String source, String target) throws IOException {  
  30.         try (FileInputStream in = new FileInputStream(source)) {  
  31.             try (FileOutputStream out = new FileOutputStream(target)) {  
  32.                 FileChannel inChannel = in.getChannel();  
  33.                 FileChannel outChannel = out.getChannel();  
  34.                 ByteBuffer buffer = ByteBuffer.allocate(4096);  
  35.                 while(inChannel.read(buffer) != -1) {  
  36.                     buffer.flip();  
  37.                     outChannel.write(buffer);  
  38.                     buffer.clear();  
  39.                 }  
  40.             }  
  41.         }  
  42.     }  
  43. }  
0 0
原创粉丝点击