生成百萬條銀行卡號
阿新 • • 發佈:2019-01-22
前段時間一個測試朋友讓幫忙寫個生成百萬條不重複資料的程式,做測試工作使用,於是吃完飯就開始寫了會,今天有空過來看了看部落格,發現沒什麼東西所以就將這段程式碼傳上來,僅僅為了記住這一過程:
剛開始想了想生成百萬條無非就是寫個100萬次迴圈計數的方法,後來在使用過程中發現在70萬左右的時候便發生了記憶體溢位問題。於是進行了程式碼拆分,50萬寫一次。 程式碼如下
剛開始想了想生成百萬條無非就是寫個100萬次迴圈計數的方法,後來在使用過程中發現在70萬左右的時候便發生了記憶體溢位問題。於是進行了程式碼拆分,50萬寫一次。 程式碼如下
import static java.lang.System.out; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.util.Arrays; /** * 原理:因檔案記憶體太大容易記憶體溢位,故分成2個檔案各寫入五十萬條,然後進行合併 * @author thinkpad * */ public class Test { public static final int BUFSIZE = 1024 * 8; //輸出檔案路徑1 public static String OUT_FILE_1="D://bank1.csv"; //輸出檔案路徑2 public static String OUT_FILE_2="D://bank2.csv"; //合併檔案路徑 public static String OUT_PUT_FILE="D:/output.csv"; //逗號分隔 public static String COMMA_SPLIT=","; //換行分隔 public static String LINE_SPLIT="\n"; /** * 寫檔案 * 由於一次性寫入記憶體會出現溢位,故放2個檔案然後再進行合併 */ public static long produce(String outFileName,long b_no){ File outfile=new File(outFileName); long b_max_no=b_no+500000; try { BufferedWriter bw = new BufferedWriter(new FileWriter(outfile)); StringBuffer sb_t=new StringBuffer(); while(b_no