java的io,nio和commons的io比較總結
今天有個任務,有個120M左右,內含600多W條記錄,記錄之間按行分隔的檔案,
分割成20W條記錄每個檔案,以便在其他程式中匯入。
由於自己手殘,機器上裝了WIndows,配置還太差沒法布hadoop,因此只能本機實現了。
使用java自身的IO和commons的IO實現了兩套方法比較一下。
等回家之後,看看用hadoop的api能不能編起來簡單一點
- import java.io.*;
- import java.util.*;
- import org.apache.commons.io.*;
- /**
-
* 任務:將一個儲存了大約600W行左右記錄(120M)的檔案按照20W行分割為若干個檔案
- * @author RangE
- *
- */
- publicclass BasicFileSplitter {
- private BasicFileSplitter() {}
- /**
- * 最基本的檔案分割方法,使用BufferedReader和BufferedWriter
- * about 2700000ms cost on the task on Wed 13 Nov 2013
- *
- * 這個方法是最基本的IO,其效能瓶頸主要在於檔案寫入。
-
* 寫入檔案使用的BufferedWriter使用字元流寫入,但此處的實現是寫一行就flush一次輸出流,拖慢了寫入速度
- *
- * @param inputPath
- * @param outputPath
- * @throws IOException
- */
- publicstaticvoid splitFile(String inputPath, String outputPath) throws IOException {
- BufferedReader reader = null;
- BufferedWriter writer = null;
- try {
-
reader = new
- String temp = "";
- int countFiles = 0;
- int countLines = 0;
- System.out.println("Starting spliting files...");
- while ((temp = reader.readLine()) != null) {
- //System.out.println(temp);
- writer = new BufferedWriter
- (new OutputStreamWriter
- (new FileOutputStream(outputPath + countFiles + ".data", true), "UTF-8"));
- writer.write(temp + "\n");
- writer.flush();
- countLines++;
- if (countLines == 200000) {
- System.out.println("Spliting file into parts: " + countFiles);
- countFiles++;
- countLines = 0;
- }
- }
- } finally {
- if (reader != null)
- reader.close();
- if (writer != null)
- writer.close();
- System.out.println("Spliting finished successfully.");
- }
- }
- /**
- * 使用java.nio優化讀寫的分割
- * @param input
- * @param path
- */
- publicstaticvoid splitFileByNewerIO(File input, String path) {
- //上網上查了一下:
- //要是需要一行一行處理的話還是用BufferedReader的readLine吧...
- //我試了試,用ByteBuffer的話,光處理分行問題就費不少時間.
- //原帖地址:http://bbs.csdn.net/topics/120096457
- //因此不予實現
- }
- /**
- * 用org.apache.commons.io完成的檔案分割
- * 17975ms cost on the task on Wed 13 Nov 2013
- *
- * Iterator讀檔案也是使用BufferedReader讀取,
- * 可知主要的效能提升在於FileUtils的寫(writeLines)方法,最終呼叫了IOUtils的writeLines使用BufferedOutputStream位元組流寫入
- *
- * 注:用此方法分割後,分割檔案總大小略大於被分割檔案大小
- *
- * @param inputPath
- * @param outputPath
- * @throws IOException
- */
- publicstaticvoid splitFileByCommonsIO(String inputPath, String outputPath)
- throws IOException {
- LineIterator it = null;
- try {
- it = FileUtils.lineIterator(new File(inputPath), "UTF-8");
- int lineCounter = 0;
- int fileCounter = 0;
- List lineList = new ArrayList();
- System.out.println("Starting..");
- while (it.hasNext()) {
- lineList.add(it.nextLine());
- lineCounter++;
- if (lineCounter == 200000) {
- FileUtils.writeLines(new File(outputPath + "_" + fileCounter), "UTF-8", lineList, true);
- lineList.clear();
- lineCounter = 0;
- fileCounter++;
- System.out.println("Complete file " + fileCounter);
- }
- }
- if (lineList != null && lineList.size() > 0) {
- FileUtils.writeLines(new File(outputPath + "_" + fileCounter + 1), "UTF-8", lineList, true);
- System.out.println("Complete the last file.");
- }
- } finally {
-
if (it != null
相關推薦
java的io,nio和commons的io比較總結
今天有個任務,有個120M左右,內含600多W條記錄,記錄之間按行分隔的檔案, 分割成20W條記錄每個檔案,以便在其他程式中匯入。 由於自己手殘,機器上裝了WIndows,配置還太差沒法布hadoop,因此只能本機實現了。 使用java自身的IO和c
轉BIO,NIO和AIO講的很明白的文章
到底什麼是“IO Block” 很多人說BIO不好,會“block”,但到底什麼是IO的Block呢?考慮下面兩種情況: 用系統呼叫read從socket裡讀取一段資料 用系統呼叫read從一個磁碟檔案讀取一段資料到記憶體 如果你的直覺告訴你,這兩種都算“Block”,
結合程式碼詳細聊聊BIO,NIO和AIO
作者:大寬寬 1、到底什麼是“IO Block” 很多人說BIO不好,會“block”,但到底什麼是IO的Block呢?考慮下面兩種情況: 用系統呼叫read從socket裡讀取一段資料 用系統呼叫read從一個磁碟檔案讀取一段資料到記憶體 如果你的直覺告
java集合類,List和Set比較,各自的子類比較(ArrayList,Vector,LinkedList;HashSet,TreeSet),Map集合比較
ArrayList,LinkedList,Vector都屬於ListList:元素是有順序的,元素可以重複因為每個元素有自己的角標(索引)|-- ArrayList:底層是陣列結構,特點是:查詢很快,增刪稍微慢點,執行緒不同步:A執行緒將元素放在索引0位置,CPU排程執行緒A停止,B執行,也將元素放在索引0位
Java中BIO,NIO和AIO使用樣例
上文中分析了阻塞,非阻塞,同步和非同步概念上的區別以及各種IO模型的操作流程,本篇文章將主要介紹Java中BIO,NIO和AIO三種IO模型如何使用。需要注意的是,本文中所提到的所有樣例都是在一個server對應一個client的情況下工作的,如果你想擴充套件為一個se
MyBatis的初始化,別名,事務,外掛,快取和執行原理總結
MyBatis的初始化的過程其實就是解析配置檔案和初始化Configuration的過程。 1.MyBatis的通用執行流程 參照GOF提出的23種設計模式,可以看出MyBatis的執行流程算是種通用的模板模式,其實現過程也簡單: 首先通過相關的資原始檔配置的載入得到對應的
Java檔案讀寫IO/NIO及效能比較總結
幹Java這麼久,一直在做WEB相關的專案,一些基礎類差不多都已經忘記。經常想得撿起,但總是因為一些原因,不能如願。 其實不是沒有時間,只是有些時候疲於總結,今得空,下定決心將丟掉的都給撿起來。 檔案讀寫是一個在專案中經常遇到的工作,有些時候是因為維護,有些時候是新功能開發
Java NIO與IO的區別和比較,NIO與IO執行緒池效能比較
傳統的socket IO中,需要為每個連線建立一個執行緒,當併發的連線數量非常巨大時,執行緒所佔用的棧記憶體和CPU執行緒切換的開銷將非常巨大。使用NIO,不再需要為每個執行緒建立單獨的執行緒,可以用一個含有限數量執行緒的執行緒池,甚至一個執行緒來為任意數量的連線服務。由於執行緒數量小於連線數量,所
2015年終總結,忙碌和無所事事的一年
adding style article 技術 書籍 radi 失望 con 繼續 轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/49805231猶豫了非常久。今年的年終總結究竟要不要寫。我是非常想把
Social Network Analysis的Centrality總結,以及networkx實現EigenCentrality,PageRank和KatzCentrality的對比
節點 int nod pos rect arc 分享 http import 本文主要總結近期學習的Social Network Analysis(SNA)中的各種Centrality度量,我暫且翻譯為中心度。本文主要是實戰,理論方面幾乎沒有,因為對於龐大的SNA,我可能連
python 捕捉錯誤,exception,traceback和sys.exc_info()比較
提示 for try 包括 traceback code hello form 打印 import traceback,sys import requests try : requests.get(‘dsdsd‘) ##故意讓他出錯 except Except
大多數情況,開發人員都比較煩UI和交互,如
比較 .com 開發 人員 開發人員 .html http htm fin 大多數情況,開發人員都比較煩UI和交互,如 http://zz.letfind.com/zu/523492.htmlhttp://zz.letfind.com/zu/523495.htmlhttp:
總結for循環及for循環增強遍歷數組,list,set和map
循環 string 沒有 htable str arr val aaa entry 一.對於集合 (1)普通for循環 int[] arr = { 2, 1, 2 }; for(int i=0;i<arr.length;i++){
虛擬,混合和SD-WAN如何比較和對比
寬帶連接 物理 硬件 均衡 策略 設備 網絡工程 技術 架構 不同的WAN技術軟件定義網絡(SDN)在重塑廣域網(WAN)方面發揮了重要作用。因此,其他WAN技術(如虛擬WAN和混合WAN)經常被錯誤地與SD-WAN混為一談。雖然虛擬和混合WAN技術與SD-WAN具有相似的
關於Rigidbody,Collider和CharacterController三者之間的關系和用法的總結
詭異 nor 觸發 回調函數 force body 想要 die 實現 Rigidbody:多用在“物體”上,因為“物體”都是“死”的,他們的運動一般都是靠物理系統。所以對於Rigidbody的移動,不要用Translate(),要用各種“力”, 比如:Rigidbody的
版本更新相關,CFBundleVersion和CFBundleShortVersionString的比較,獲取版本號
移動客戶端進行版本迭代時,需要進行本地版本號和伺服器版本號比較,從而實現更新提示。本文祥講怎樣獲取版本號,具體的比較方法。 一、CFBundleShortVersionString和CFBundleVersion &nb
26 Java學習之NIO和IO得比較
轉自:https://www.cnblogs.com/aspirant/p/8630283.html 一、概念 NIO即New IO(非阻塞IO),這個庫是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,
原生Js實現複製功能的方法總結,execCommand和clipboardData的使用
原生Js實現複製(Copy)的兩種方法,一種是利用 clipboardData,另外一種則是用 execCommand(),今天將統一講解一下關於他們的使用方法。 document.execCommand 當一個HTML文件切換到設計模式(designMode)時,文件物件
貪心演算法,遞迴演算法,動態規劃演算法比較與總結
一般實際生活中我們遇到的演算法分為四類: 一>判定性問題 二>最優化問題 三>構造性問題 四>計算性問題 而今天所要總結的演算法就是著重解決 最優化問題 《演算法之道》對三種演算法進行了歸納總結,如下表所示: 分
互斥,同步和程序間通訊總結
互斥######################### 中斷遮蔽*********************************** 原子變數和原子位操作*********************************** 自旋鎖*******