1. 程式人生 > >生成百萬條銀行卡號

生成百萬條銀行卡號

前段時間一個測試朋友讓幫忙寫個生成百萬條不重複資料的程式,做測試工作使用,於是吃完飯就開始寫了會,今天有空過來看了看部落格,發現沒什麼東西所以就將這段程式碼傳上來,僅僅為了記住這一過程:


剛開始想了想生成百萬條無非就是寫個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