Java9新增的有趣方法InputStream.transferTo()

chszs發表於2018-02-01
版權宣告:本文為博主chszs的原創文章,未經博主允許不得轉載。 https://blog.csdn.net/chszs/article/details/79233855

Java 9新增的有趣方法InputStream.transferTo()

  • 2018.2.1
  • 版權宣告:本文為博主chszs的原創文章,未經博主允許不得轉載。

JDK 9新增了一個有趣的方法,InputStream.transferTo(OutputStream)方法,此方法允許從物件呼叫方法表示的輸入流中輕鬆傳輸(複製)位元組到提供給該方法的輸出流。正如方法的Javadoc註釋所述,從該輸入流中讀取所有位元組,並按照讀取的順序將位元組寫入給定的輸出流。此方法可以使Java的有些例行任務變得更容易。

在使用此方法時要注意:

  • 此方法不關閉任何流
  • 強烈建議,如果發生I/O錯誤,那麼輸入輸出兩個流都應該立即關閉。

通常是在try-with-resources語句中例項化源InputStream和目標OutputStream物件。如下面的程式碼所示:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class StreamsTransfer {
    public static void main(String[] args) {
        if(args.length < 1) {
            System.out.println("USAGE StreamsTransfer <fileName>");
            System.exit(-1);
        }
        final String fileName = args[0];
        try(final InputStream is = new FileInputStream(fileName);
                final OutputStream os = new FileOutputStream(fileName + ".copy")) {
            is.transferTo(os);
        } catch(IOException e) {
            System.out.println("Exception encountered: " + e);
        }
    }
}

通過try-with-resources語句可以確保兩個資源的正確回收。上面的程式碼很簡單,實際的應用場景就非常多了,比如可以把InputStream替換成URL.openStream()等等。


相關文章