日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java使用BIO和NIO進行文件操作對比代碼示例

瀏覽:29日期:2022-09-01 17:20:28

什么是Java NIO?

同步非阻塞io模式,拿燒開水來說,NIO的做法是叫一個線程不斷的輪詢每個水壺的狀態,看看是否有水壺的狀態發生了改變,從而進行下一步的操作。Java NIO有三大組成部分:Buffer,Channel,Selector,通過事件驅動模式實現了什么時候有數據可讀的問題。

什么是Java BIO?

同步阻塞IO模式,數據的讀取寫入必須阻塞在一個線程內等待其完成。這里使用那個經典的燒開水例子,這里假設一個燒開水的場景,有一排水壺在燒開水,BIO的工作模式就是, 叫一個線程停留在一個水壺那,直到這個水壺燒開,才去處理下一個水壺。但是實際上線程在等待水壺燒開的時間段什么都沒有做。不知道io操作中什么時候有數據可讀,所以一直是阻塞的模式。

1、讀文件

package com.zhi.test;import java.io.FileInputStream;import java.io.FileReader;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.FileChannel;import java.nio.charset.Charset;import java.nio.charset.CharsetDecoder;import java.nio.file.Files;import java.nio.file.Paths;/** * 文件讀取,緩沖區大小(BF_SIZE)對NIO的性能影響特別大,對BIO無影響<br> * 10M的文件,BIO耗時87毫秒,NIO耗時68毫秒,Files.read耗時62毫秒 * * @author 張遠志 * @since 2020年5月9日19:20:49 * */public class FileRead { /** * 緩沖區大小 */ private static final int BF_SIZE = 1024; /** * 使用BIO讀取文件 * * @param fileName 待讀文件名 * @return * @throws IOException */ public static String bioRead(String fileName) throws IOException { long startTime = System.currentTimeMillis(); try { FileReader reader = new FileReader(fileName); StringBuffer buf = new StringBuffer(); char[] cbuf = new char[BF_SIZE]; while (reader.read(cbuf) != -1) {buf.append(cbuf); } reader.close(); return buf.toString(); } finally { System.out.println('使用BIO讀取文件耗時:' + (System.currentTimeMillis() - startTime) + '毫秒'); } } /** * 使用NIO讀取文件 * * @param fileName 待讀文件名 * @return * @throws IOException */ public static String nioRead1(String fileName) throws IOException { long startTime = System.currentTimeMillis(); try { FileInputStream input = new FileInputStream(fileName); FileChannel channel = input.getChannel(); CharsetDecoder decoder = Charset.defaultCharset().newDecoder(); StringBuffer buf = new StringBuffer(); CharBuffer cBuf = CharBuffer.allocate(BF_SIZE); ByteBuffer bBuf = ByteBuffer.allocate(BF_SIZE); while (channel.read(bBuf) != -1) {bBuf.flip();decoder.decode(bBuf, cBuf, false); // 解碼,byte轉char,最后一個參數非常關鍵bBuf.clear();buf.append(cBuf.array(), 0, cBuf.position());cBuf.compact(); // 壓縮 } input.close(); return buf.toString(); } finally { System.out.println('使用NIO讀取文件耗時:' + (System.currentTimeMillis() - startTime) + '毫秒'); } } /** * 使用Files.read讀取文件 * * @param fileName 待讀文件名 * @return * @throws IOException */ public static String nioRead2(String fileName) throws IOException { long startTime = System.currentTimeMillis(); try { byte[] byt = Files.readAllBytes(Paths.get(fileName)); return new String(byt); } finally { System.out.println('使用Files.read讀取文件耗時:' + (System.currentTimeMillis() - startTime) + '毫秒'); } } public static void main(String[] args) throws IOException { String fileName = 'E:/source.txt'; FileRead.bioRead(fileName); FileRead.nioRead1(fileName); FileRead.nioRead2(fileName); }}

2、寫文件

package com.zhi.test;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;import java.nio.file.Files;import java.nio.file.StandardOpenOption;/** * 文件寫<br> * 10M的數據,BIO耗時45毫秒,NIO耗時42毫秒,Files.write耗時24毫秒 * * @author 張遠志 * @since 2020年5月9日21:04:40 * */public class FileWrite { /** * 使用BIO進行文件寫 * * @param fileName 文件名稱 * @param content 待寫內存 * @throws IOException */ public static void bioWrite(String fileName, String content) throws IOException { long startTime = System.currentTimeMillis(); try { FileWriter writer = new FileWriter(fileName); writer.write(content); writer.close(); } finally { System.out.println('使用BIO寫文件耗時:' + (System.currentTimeMillis() - startTime) + '毫秒'); } } /** * 使用NIO進行文件寫 * * @param fileName 文件名稱 * @param content 待寫內存 * @throws IOException */ public static void nioWrite1(String fileName, String content) throws IOException { long startTime = System.currentTimeMillis(); try { FileOutputStream out = new FileOutputStream(fileName); FileChannel channel = out.getChannel(); ByteBuffer buf = ByteBuffer.wrap(content.getBytes()); channel.write(buf); out.close(); } finally { System.out.println('使用NIO寫文件耗時:' + (System.currentTimeMillis() - startTime) + '毫秒'); } } /** * 使用Files.write進行文件寫 * * @param fileName 文件名稱 * @param content 待寫內存 * @throws IOException */ public static void nioWrite2(String fileName, String content) throws IOException { long startTime = System.currentTimeMillis(); try { File file = new File(fileName); if (!file.exists()) {file.createNewFile(); } Files.write(file.toPath(), content.getBytes(), StandardOpenOption.WRITE); } finally { System.out.println('使用Files.write寫文件耗時:' + (System.currentTimeMillis() - startTime) + '毫秒'); } } public static void main(String[] args) throws IOException { String content = FileRead.nioRead2('E:/source.txt'); String target1 = 'E:/target1.txt', target2 = 'E:/target2.txt', target3 = 'E:/target3.txt'; FileWrite.bioWrite(target1, content); FileWrite.nioWrite1(target2, content); FileWrite.nioWrite2(target3, content); }}

3、復制文件

package com.zhi.test;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.channels.FileChannel;import java.nio.file.Files;import java.nio.file.Paths;/** * 文件復制<br> * 10M的文件,bio耗時56毫秒,nio耗時12毫秒,Files.copy耗時10毫秒 * * @author 張遠志 * @since 2020年5月9日17:18:01 * */public class FileCopy { /** * 使用BIO復制一個文件 * * @param target 源文件 * @param source 目標文件 * * @throws IOException */ public static void bioCopy(String source, String target) throws IOException { long startTime = System.currentTimeMillis(); try { FileInputStream fin = new FileInputStream(source); FileOutputStream fout = new FileOutputStream(target); byte[] byt = new byte[1024]; while (fin.read(byt) > -1) {fout.write(byt); } fin.close(); fout.close(); } finally { System.out.println('使用BIO復制文件耗時:' + (System.currentTimeMillis() - startTime) + '毫秒'); } } /** * 使用NIO復制一個文件 * * @param target 源文件 * @param source 目標文件 * * @throws IOException */ public static void nioCopy1(String source, String target) throws IOException { long startTime = System.currentTimeMillis(); try { FileInputStream fin = new FileInputStream(source); FileChannel inChannel = fin.getChannel(); FileOutputStream fout = new FileOutputStream(target); FileChannel outChannel = fout.getChannel(); inChannel.transferTo(0, inChannel.size(), outChannel); fin.close(); fout.close(); } finally { System.out.println('使用NIO復制文件耗時:' + (System.currentTimeMillis() - startTime) + '毫秒'); } } /** * 使用Files.copy復制一個文件 * * @param target 源文件 * @param source 目標文件 * * @throws IOException */ public static void nioCopy2(String source, String target) throws IOException { long startTime = System.currentTimeMillis(); try { File file = new File(target); if (file.exists()) {file.delete(); } Files.copy(Paths.get(source), file.toPath()); } finally { System.out.println('使用Files.copy復制文件耗時:' + (System.currentTimeMillis() - startTime) + '毫秒'); } } public static void main(String[] args) throws IOException { String source = 'E:/source.txt'; String target1 = 'E:/target1.txt', target2 = 'E:/target2.txt', target3 = 'E:/target3.txt'; FileCopy.bioCopy(source, target1); FileCopy.nioCopy1(source, target2); FileCopy.nioCopy2(source, target3); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美另类中文字幕 | 精品日韩毛片| 精品欧美视频| 久久久免费人体| 国产欧美日韩综合一区在线播放| 热久久免费视频| 亚洲美女久久| 男女激情视频一区| 亚洲日本三级| 日韩精品免费视频人成| 亚洲欧美网站在线观看| 亚洲精品黄色| 欧美亚洲专区| 久久精品午夜| 国产 日韩 欧美一区| 一本一道久久a久久精品蜜桃| 欧美一区二区三区激情视频| 欧美日韩国产免费观看 | 日韩精品亚洲专区| 日本a级不卡| 欧美天堂一区| 欧美成a人免费观看久久| 欧美二区视频| 亚洲乱码久久| 四虎成人av| 午夜在线视频观看日韩17c| 国产日韩亚洲欧美精品| 亚洲天堂一区二区| 亚洲免费成人av在线| 精品久久久网| 99pao成人国产永久免费视频 | 国产精品综合色区在线观看| 国产成人久久精品麻豆二区 | 美国三级日本三级久久99| 国产精品毛片视频| 99在线观看免费视频精品观看| 欧美一级久久| 99在线精品免费视频九九视 | 日韩午夜av| 欧美www视频在线观看| 中文字幕日韩亚洲| 日韩精品水蜜桃| 国产精品白丝久久av网站| 99精品在线免费在线观看| 国产欧美一区二区三区精品观看 | 夜夜嗨一区二区| 成人一区而且| 国产欧美日韩视频在线| 三级一区在线视频先锋| 久久九九精品| 国产一区二区三区视频在线| 亚洲影视一区二区三区| 夜夜精品视频| 免费国产自久久久久三四区久久| 成人亚洲精品| 韩国一区二区三区视频| 欧美久久精品| 日韩影院在线观看| 玖玖精品视频| 亚洲国产成人精品女人| 成人日韩在线观看| 成年男女免费视频网站不卡| 国产高清视频一区二区| 国产精品115| 久久在线91| 日韩理论片av| 亚洲不卡av不卡一区二区| av高清不卡| 国产在线不卡| 亚洲女同一区| 亚洲中字黄色| 男女激情视频一区| 影音先锋久久精品| 日韩黄色在线观看| 国产精品**亚洲精品| 国内自拍视频一区二区三区| 黄在线观看免费网站ktv| 91精品国产福利在线观看麻豆| 久久国产日韩| 亚洲久久一区| 久久99久久人婷婷精品综合| 国产成人精品999在线观看| 国产日韩电影| 尤物在线精品| 国产欧美一区二区三区国产幕精品| 精品国产亚洲日本| 久久九九电影| 日韩中文字幕区一区有砖一区| 蜜桃av一区二区| 国产精品qvod| 激情欧美日韩一区| 国产亚洲一区| 欧美日韩一二三四| 欧美日韩99| 欧美精品羞羞答答| 国产精品综合| 亚洲一区国产一区| 精品视频91| 一区二区亚洲视频| 欧美羞羞视频| 久久国际精品| 久久久精品午夜少妇| 免费成人av在线播放| 91麻豆国产自产在线观看亚洲| 黄色成人在线网址| 麻豆精品视频在线| 日本大胆欧美人术艺术动态| 精品视频一区二区三区在线观看| 国产视频一区欧美| 色黄视频在线观看| 国产精品亚洲二区| 视频一区二区中文字幕| 日本少妇一区| 久久久国产精品网站| 91精品国产自产观看在线| 蜜臀av免费一区二区三区| 另类专区亚洲| 日韩一区二区三区高清在线观看| 亚洲最新无码中文字幕久久 | 国产午夜久久| 久久精品高清| 欧美aa一级| 红杏一区二区三区| 欧美国产日韩电影| 国产精品一区二区av交换| 中文字幕日韩亚洲| 免费久久99精品国产自在现线| 99精品综合| 精品国产第一福利网站| 国产成人久久精品一区二区三区| 国产精品亚洲综合久久| 国产高清亚洲| 国产日产精品_国产精品毛片 | 日韩欧美中文| 成人一二三区| 高清在线一区| 亚洲精品成人图区| 亚洲v在线看| 欧美日韩国产一区精品一区| 久久影院一区| 免费成人在线影院| 欧美日韩18| 精品国产91| 国产在线成人| 在线观看视频免费一区二区三区| 免费在线成人网| 国产精品一区二区精品视频观看| 国产精品一区二区美女视频免费看| 日本va欧美va精品发布| 欧美一区激情| 91精品国产91久久久久久黑人| 国产精品毛片| 国产欧美在线观看免费| 福利视频一区| 久热re这里精品视频在线6| 国产乱码精品一区二区三区四区 | www.九色在线| 久久av在线| 国产精品久久久久久久久久白浆 | 久久精品色播| 视频在线观看91| 国产精品99一区二区三区| 亚洲欧美日韩高清在线| 国产探花一区在线观看| 国产综合色区在线观看| 日本高清久久| 欧美中文字幕一区二区| а√在线中文在线新版| 日韩毛片视频| 蜜臀a∨国产成人精品| 日本在线观看不卡视频| 国产精品最新自拍| 黄色日韩在线| аⅴ资源天堂资源库在线| 一区二区电影在线观看| 91av亚洲| 国产精品久久国产愉拍| 免费久久精品| 日韩伦理一区| 国产精品伊人| 日本一不卡视频| 日韩精品一卡| 美腿丝袜亚洲一区| 日韩精品久久理论片| 久久久影院免费| 国产成人精品三级高清久久91 | 91久久视频| av资源亚洲| 九九九精品视频| 69堂免费精品视频在线播放| 免费日韩av| 黄色亚洲精品| 欧美.日韩.国产.一区.二区| 精品一区91| 麻豆国产一区| 久久福利在线| 国产精品欧美大片| 国产精品一国产精品k频道56| 免播放器亚洲一区| 蜜臀国产一区二区三区在线播放|