IO // NIO 實現方式比較
阿新 • • 發佈:2019-01-05
69、Java 中有幾種型別的流?
答:位元組流,字元流。位元組流繼承於InputStream、OutputStream,字元流繼承於Reader、Writer。在java.io 包中還有許多其他的流,主要是為了提高效能和使用方便。
補充:關於Java的IO需要注意的有兩點:一是兩種對稱性(輸入和輸出的對稱性,位元組和字元的對稱性);二是兩種設計模式(介面卡模式和裝潢模式)。另外Java中的流不同於C#的是它只有一個維度一個方向。
補充:下面用IO和NIO兩種方式實現檔案拷貝,這個題目在面試的時候是經常被問到的。
- package com.lovo;
-
import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.nio.ByteBuffer;
- import java.nio.channels.FileChannel;
- publicclass MyUtil {
- private MyUtil() {
- thrownew AssertionError();
- }
-
public
- try (InputStream in = new FileInputStream(source)) {
- try (OutputStream out = new FileOutputStream(target)) {
- byte[] buffer = newbyte[4096];
- int bytesToRead;
-
while
- out.write(buffer, 0, bytesToRead);
- }
- }
- }
- }
- publicstaticvoid 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();
- }
- }
- }
- }
- }