日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

传图识字java_Java:全面 清晰的 NIO 学习攻略

發布時間:2023/12/10 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 传图识字java_Java:全面 清晰的 NIO 学习攻略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java:全面 & 清晰的 NIO 學習攻略

發布時間:2018-11-19 09:19,

瀏覽次數:202

, 標簽:

Java

NIO

<>前言

* JDK 1.4后,Java提供了一個全新的IO API,即 Java New IO

* 本文 全面 & 詳細解析Java New IO,希望你們會喜歡

<>目錄

<>儲備知識:Java IO

<>1. 定義

* 即 Java New IO

* 是1個全新的、 JDK 1.4后提供的 IO API

<>2. 作用

* 提供了與標準IO不同的IO工作方式

* 可替代 標準Java IO 的IO API

<>3. 新特性

對比于 Java IO,NIO具備的新特性如下

<>4. 核心組件

Java NIO的核心組件 包括:

* 通道(Channel)

* 緩沖區(Buffer)

* 選擇器(Selectors)

下面將詳細介紹:

<>5. 具體使用

<>5.1 基于通道 & 緩沖數據

具體步驟如下:

// 1. 獲取數據源 和 目標傳輸地的輸入輸出流(此處以數據源 = 文件為例) FileInputStream fin = new

FileInputStream(infile); FileOutputStream fout = new FileOutputStream(outfile);

// 2. 獲取數據源的輸入輸出通道 FileChannel fcin = fin.getChannel(); FileChannel fcout =

fout.getChannel(); // 3. 創建 緩沖區 對象:Buffer(共有2種方法) // 方法1:使用allocate()靜態方法

ByteBuffer buff = ByteBuffer.allocate(256); // 上述方法創建1個容量為256字節的ByteBuffer //

注:若發現創建的緩沖區容量太小,則重新創建一個大小合適的緩沖區 // 方法2:通過包裝一個已有的數組來創建 //

注:通過包裝的方法創建的緩沖區保留了被包裝數組內保存的數據 ByteBuffer buff = ByteBuffer.wrap(byteArray); //

額外:若需將1個字符串存入ByteBuffer,則如下 String sendString="你好,服務器. "; ByteBuffer sendBuff =

ByteBuffer.wrap(sendString.getBytes("UTF-16")); // 4. 從通道讀取數據 & 寫入到緩沖區 // 注:若

以讀取到該通道數據的末尾,則返回-1 fcin.read(buff); // 5. 傳出數據準備:將緩存區的寫模式 轉換->> 讀模式

buff.flip(); // 6. 從 Buffer 中讀取數據 & 傳出數據到通道 fcout.write(buff); // 7. 重置緩沖區 //

目的:重用現在的緩沖區,即 不必為了每次讀寫都創建新的緩沖區,在再次讀取之前要重置緩沖區 // 注:不會改變緩沖區的數據,只是重置緩沖區的主要索引值

buff.clear();

<>5.2 基于選擇器(Selecter)

具體步驟如下:

// 1. 創建Selector對象 Selector sel = Selector.open(); // 2. 向Selector對象綁定通道 // a.

創建可選擇通道,并配置為非阻塞模式 ServerSocketChannel server = ServerSocketChannel.open();

server.configureBlocking(false); // b. 綁定通道到指定端口 ServerSocket socket =

server.socket(); InetSocketAddress address = new InetSocketAddress(port);

socket.bind(address); // c. 向Selector中注冊感興趣的事件 server.register(sel,

SelectionKey.OP_ACCEPT); return sel; // 3. 處理事件 try { while(true) { //

該調用會阻塞,直到至少有一個事件就緒、準備發生 selector.select(); // 一旦上述方法返回,線程就可以處理這些事件

Set keys = selector.selectedKeys(); Iterator iter =

keys.iterator(); while (iter.hasNext()) { SelectionKey key = (SelectionKey)

iter.next(); iter.remove(); process(key); } } } catch (IOException e) {

e.printStackTrace(); }

<>6. 實例講解

* 實例說明:實現文件復制功能

* 實現方式:通道FileChannel、 緩沖區ByteBuffer import java.io.FileInputStream; import

java.io.FileOutputStream; import java.io.IOException; import

java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class Test {

public static void main(String[] args) throws IOException { // 設置輸入源 & 輸出地 = 文件

String infile = "C:\\copy.sql"; String outfile = "C:\\copy.txt"; // 1. 獲取數據源 和

目標傳輸地的輸入輸出流(此處以數據源 = 文件為例) FileInputStream fin = new FileInputStream(infile);

FileOutputStream fout = new FileOutputStream(outfile); // 2. 獲取數據源的輸入輸出通道

FileChannel fcin = fin.getChannel(); FileChannel fcout = fout.getChannel(); //

3. 創建緩沖區對象 ByteBuffer buff = ByteBuffer.allocate(1024); while (true) { // 4.

從通道讀取數據 & 寫入到緩沖區 // 注:若 以讀取到該通道數據的末尾,則返回-1 int r = fcin.read(buff); if (r ==

-1) { break; } // 5. 傳出數據準備:調用flip()方法 buff.flip(); // 6. 從 Buffer 中讀取數據 &

傳出數據到通道 fcout.write(buff); // 7. 重置緩沖區 buff.clear(); } } }

<>7. 與Java IO的區別

<>8. 總結

* 本文全面講解了Java中的NIO的相關知識

* 下面我將繼續對 Android & Java中的知識進行深入講解 ,有興趣可以繼續關注Carson_Ho的安卓開發筆記

<>請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

總結

以上是生活随笔為你收集整理的传图识字java_Java:全面 清晰的 NIO 学习攻略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。