日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java按行读取byte_【util】MappedByteBuffer按行读取的方案

發(fā)布時(shí)間:2024/4/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java按行读取byte_【util】MappedByteBuffer按行读取的方案 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原始代碼出處:http://blog.163.com/cazwxy_12/blog/static/8987637201611161426426/

最近有個(gè)寫日志的需求,已經(jīng)有一個(gè)方案是通過randomaccessfile進(jìn)行逐行讀取,但是偶爾會(huì)出現(xiàn)bug,雖然我可以通過try catch去捕獲寫進(jìn)錯(cuò)誤日志,不過這樣難免不夠好,希望有一個(gè)沒有bug的版本。。。我希望用MappedByteBuffer寫出按行讀取的方案,于是百度了一下,卻無意中找到一個(gè)用MappedByteBuffer寫的util,想法和我的一樣,先通過通道進(jìn)行一部分buffer的壓入,然后處理篩出有效的內(nèi)容。

代碼如下

package com.shijia.test;

import java.io.File;

import java.io.FileInputStream;

import java.lang.reflect.Method;

import java.nio.ByteBuffer;

import java.nio.MappedByteBuffer;

import java.nio.channels.FileChannel;

import java.security.AccessController;

import java.security.PrivilegedAction;

/**

* MappedByteBufferReadLineUtil

* @author fish

*

*/

public class MappedByteBufferReadLineUtil {

private FileInputStream fis;

private FileChannel fc;

private MappedByteBuffer mbb;

private int currentReadPos;

private int limit ;

public MappedByteBufferReadLineUtil(File file) throws Exception{

if(!file.exists() || !file.isFile()){

throw new Exception("指定文件不存在或者不是一個(gè)文件");

}

fis = new FileInputStream(file);

fc = fis.getChannel();

mbb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());

limit = mbb.limit();

}

public MappedByteBufferReadLineUtil(String filePath) throws Exception{

this(new File(filePath));

}

/**

* 指定每行的容量,最大字節(jié)數(shù)

* 如果存在行超過指定最大字節(jié),則會(huì)

* @param capacity

* @return

* @throws Exception

*/

public String readLine(int capacity) throws Exception{

try{

if(currentReadPos >= limit){

return null;

}

ByteBuffer bb = ByteBuffer.allocate(capacity==0?1024:capacity);

while(currentReadPos < limit){

byte b = mbb.get();

currentReadPos++;

if(System.getProperty("line.separator").equals("\r\n") && b==13){

mbb.get();

currentReadPos++;

break;

}else if(b==10 || b==13){

break;

}else{

bb.put(b);

}

}

return rightTrim(new String(bb.array(),"GBK"));

}catch(Exception e){

clean();

throw e;

}finally{

fc.close();

fis.close();

}

}

/**

* 默認(rèn)1024字節(jié)

* @return

* @throws Exception

*/

public String readLine() throws Exception{

return readLine(0);

}

/**

* 清理ByteBuffer

* @param buffer

* @throws Exception

*/

@SuppressWarnings({ "unchecked", "rawtypes" })

public void clean() throws Exception {

AccessController.doPrivileged(new PrivilegedAction() {

public Object run() {

try {

Method getCleanerMethod = mbb.getClass().getMethod("cleaner",new Class[0]);

getCleanerMethod.setAccessible(true);

sun.misc.Cleaner cleaner =(sun.misc.Cleaner)getCleanerMethod.invoke(mbb,new Object[0]);

cleaner.clean();

} catch(Exception e) {

e.printStackTrace();

}

return null;

}

});

}

private String rightTrim(String s){

char[] cs = s.toCharArray();

int pos= 0;

for(int i=cs.length-1;i>=0;i--){

String tostr = String.valueOf(cs[i]);

if(tostr.trim().length()!=0){

pos = i;

break ;

}

}

return s.substring(0,pos+1);

}

public static void main(String[] args){

MappedByteBufferReadLineUtil mbbrlutil = null;

try{

mbbrlutil = new MappedByteBufferReadLineUtil("C:\\Users\\shijia\\Desktop\\log-2017-10-27");

String line = null;

while((line = mbbrlutil.readLine())!=null){

System.out.println(line);

}

}catch(Exception e){

e.printStackTrace();

}finally{

try {

mbbrlutil.clean();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

總結(jié)

以上是生活随笔為你收集整理的java按行读取byte_【util】MappedByteBuffer按行读取的方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人精品一区二区三区 | 俺也去婷婷 | 日韩欧美不卡在线 | 成人区人妻精品一区二区不卡视频 | 中文字幕乱码人妻无码久久95 | www国产在线观看 | 在线精品国产 | 精品在线播放视频 | 色成人免费网站 | 成年人在线免费 | 亚洲精品高清无码视频 | 在线观看中文字幕 | 大肉大捧一进一出好爽视频 | 国产精品九九九 | 午夜看片福利 | 日韩欧美一级在线 | 少妇野外性xx老女人野外性xx | 色婷婷综合网 | 欧美不卡一二三 | 久久久久久亚洲av无码专区 | 日韩一区二区免费看 | 91免费在线视频 | missav|免费高清av在线看 | 久久亚洲成人av | 粉嫩av懂色av蜜臀av分享 | 福利视频在线看 | 韩日精品在线 | 亚洲激情a | av大片在线看 | 操人视频免费看 | 亚洲精品粉嫩小泬20p | 嫩草嫩草嫩草 | 亚洲av无码乱码国产麻豆 | 久久99精品久久久久久三级 | www.久久艹| 韩国女主播av | 中文字幕精品一区 | 亚洲aⅴ乱码精品成人区 | www.天堂在线 | 久久久久99精品成人片试看 | 视频精品一区二区 | 疯狂撞击丝袜人妻 | 色综合成人 | 欧美日韩伦理片 | 久久亚洲第一 | 日韩成人在线播放 | 亚洲剧情av| 又黄又色| 中文字幕视频免费 | 国产精品入口a级 | 国产3p在线播放 | 九九九在线观看 | 成人做爰视频www网站小优视频 | 一个色在线 | 强开小受嫩苞第一次免费视频 | 91欧美一区二区三区 | 黄色片视频播放 | 欧美不卡网 | 九九视频在线播放 | 国产第一av | 亚洲av无码乱码在线观看性色 | 一区二区国产精品视频 | 先锋av网| 毛片高清免费 | 一区二区三区在线免费视频 | 黄色伊人| 久久久久久中文 | 青娱乐91| 亚洲精品一区二区在线观看 | 小珊的性放荡羞辱日记 | 99精品中文字幕 | 在线免费黄色片 | 色射射| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 99久久久无码国产精品性青椒 | 亚洲老老头同性老头交j | 涩涩涩涩涩涩涩涩涩涩 | 在线观看欧美视频 | 精品久久久久久国产 | 日韩亚洲精品在线 | 99久久黄色 | 一区二区啪啪啪 | 91精产品一区观看 | 91毛片在线观看 | 国产又爽又黄无码无遮挡在线观看 | jizz色| 777色婷婷 | 久久国产热 | 天天操天天射天天爽 | 日日狠狠久久 | a级在线免费观看 | 国产农村妇女精品一区二区 | 亚洲一区久久 | 国产剧情一区二区三区 | 国产精品456| 国产精品久久久久久 | 亚洲A∨无码国产精品 | 1000部啪啪未满十八勿入超污 | 久久久久久久久久一级 |