package io.netty.example.http.snoop;
import java.io.FileOutputStream;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class WriterFile {
// 鎸囧畾澶у皬涓?1024 鐨勭紦鍐插尯
public static ByteBuffer bytebufferone = ByteBuffer.allocate(102400000);
public static ByteBuffer bytebuffertwo = ByteBuffer.allocate(102400000);
public static boolean checkbuffer =true;
public static void main(String[] args) {
long start = System.nanoTime();
for(int i=0;i<100000000;i++){
if(checkbuffer)
processone("123abc"+i+"\r\n");
else
prcesstwo("123abc"+i+"\r\n");
}
long end = System.nanoTime();
System.out.println((end - start)+"鑰楁椂");
}
/**
* bytebuffertwo鍐欐棩蹇?br /> */
public static void prcesstwo(String log)
{
//鍐檅ytebuff
boolean onecheck=checkposition(log,bytebuffertwo);
if(onecheck)
writerbuffer(log,bytebuffertwo);
//鍐欐枃浠?br /> else{
checkbuffer=true;
writerbuffer(log,bytebufferone);
writerfile(bytebuffertwo);
}
}
/**
* bytebufferone鍐欐棩蹇?br /> * @param log
*/
public static void processone(String log)
{
//鍐檅ytebuff
boolean onecheck=checkposition(log,bytebufferone);
if(onecheck){
writerbuffer(log,bytebufferone);
}
//鍐欐枃浠?br /> else{
checkbuffer=false;
writerbuffer(log,bytebuffertwo);
writerfile(bytebufferone);
}
}
/**
* 鍒ゆ柇緙撳瓨鏄惁鍙互鍐欎笅鏃ュ織
* @param log
* @return
*/
public static boolean checkposition(String log,ByteBuffer bytebuffer)
{
if(2*log.getBytes().length>bytebuffer.limit()-bytebuffer.position())
{
return false;
}
else
{
return true;
}
}
/**
* 鍐欐棩蹇楀埌緙撳瓨錛屽茍涓旇繑鍥炵紦瀛樻寚閽堜綅緗?br /> * @param log
* @return
*/
public static int writerbuffer(String log,ByteBuffer bytebuffer )
{
for (int i = 0; i < log.length(); i++) {
bytebuffer.putChar(log.charAt(i));
}
return bytebuffer.position();
}
/**
* 鍐欐枃浠?br /> * @param filename
*/
public static void writerfile(ByteBuffer bytebuffer)
{
try{
FileOutputStream fos = new FileOutputStream(Datefile());
FileChannel fc = fos.getChannel();
bytebuffer.flip();
fc.write(bytebufferone);
fc.close();
fos.close();
bytebuffer.clear();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
/**
* 鏂囦歡鍚嶆寜鏃ユ湡鐢熶駭
* @param str
* @return
*/
public static String Datefile() {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_HHmmss");
String str = format.format(new Date());
return "d:/test/"+str+".txt";
}
}
闄勫甫涓涓櫘閫氱殑nio璇誨啓
public static void test()
{
try{
FileOutputStream fos = new FileOutputStream("d:/nio.txt");
// 寰楀埌鏂囦歡閫氶亾
FileChannel fc = fos.getChannel();
// 鎸囧畾澶у皬涓?1024 鐨勭紦鍐插尯
ByteBuffer bf = ByteBuffer.allocate(1024);
// 瑕佸啓鍏ユ枃浠剁殑瀛楃涓?br /> String greeting = "Hello111";
// 鎶婁互涓婂瓧絎︿覆閫愬瓧鏀懼叆緙撳啿鍖?br /> for (int i = 0; i < greeting.length(); i++) {
bf.putChar(greeting.charAt(i));
}
// 璁板緱鎵ц榪欎釜鏂規硶錛屼嬌寰?position=0, limit=30, 鎵嶈兘鍐欏叆姝g‘鐨勬暟鎹?br /> // 鍚﹀垯 position 涓?30, limit 涓?1024錛屽皢浼氭妸 30 涔嬪悗鐨勫叏閮ㄧ┖鏁版嵁(0) 濉埌鏂囦歡涓?br />
System.out.println(greeting.getBytes().length);
System.out.println(bf.position());
System.out.println(bf.limit());
bf.flip();
// 緙撳啿鍖烘暟鎹啓鍏ュ埌鏂囦歡涓紝浼氭妸緙撳啿鍖轟腑浠?position 鍒?limit 涔嬮棿鐨勬暟鎹啓鍏ユ枃浠?br /> fc.write(bf);
fc.close(); // 鍏抽棴鏂囦歡閫氶亾
fos.close(); // 鍏抽棴鏂囦歡杈撳嚭嫻?br /> }catch(Exception e){
e.printStackTrace();
}
}