JAVA之NIO按行读取大文件 您所在的位置:网站首页 nio读写文件 JAVA之NIO按行读取大文件

JAVA之NIO按行读取大文件

2023-12-09 05:29| 来源: 网络整理| 查看: 265

public boolean hasNext() throws IOException {

        if(EOF)return false;        if(fbb.position()==fbb.limit()){//判断当前位置是否到了缓冲区的限制            if(readByte()==0)  return false;        }        while(true){            if(fbb.position()==fbb.limit()){                if(readByte()==0)  break;            }            byte a=fbb.get();            if(a==13){                if(fbb.position()==fbb.limit()){                    if(readByte()==0)  break;                }                return true;            }else{                if (bb.position() < bb.limit()) {                    bb.put(a);                }else {                    if(readByte()==0)  break;                }            }        }        return true;    }

private int readByte() throws IOException{        //使缓冲区做好了重新读取已包含的数据的准备:它使限制保持不变,并将位置设置为零。         fbb.rewind();        //使缓冲区做好了新序列信道读取或相对 get 操作的准备:它将限制设置为当前位置,然后将该位置设置为零。         fbb.clear();        if(this.fc.read(fbb)==-1){             EOF=true;            return 0;        }else{            fbb.flip();            return fbb.position();        }    }

    public byte[] next(){        bb.flip();

        //此处很重要,返回byte数组方便,行被分割的情况下合并,否则如果正好达到缓冲区的限制时,一个中文汉字被拆了两个字节,就会显示不正常        byte tm[] = Arrays.copyOfRange(bb.array(), bb.position(), bb.limit());        bb.clear();        return tm;    }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有