利用java.nio的FileChannel能够实现按行读取文件吗?(解决了)

利用java.nio的FileChannel能够实现按行读取文件吗?(解决了),第1张

利用java.nio的FileChannel能够实现按腊塌行读取文件

具体思路是:设置两个缓冲区,一大一小,大的缓冲区为每次读取的量,小的缓冲区存放每行的数据(确保大小可存放文本中最长的那行)。读取的时候判断是不是换行符13,是的话则返回一行数据,不是的话继续读取,直到读完文件。

实现方法:

   皮局拦     FileChannel fc=raf.getChannel()

       //一次读取文件,读取的字节缓存数

       ByteBuffer fbb=ByteBuffer.allocate(1024*5)

        fc.read(fbb)

        fbb.flip()

     //每行缓存的字节   根据你的实际需求     

      ByteBuffer bb=ByteBuffer.allocate(500)

   

         燃胡     //判断是否读完文件

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

    }

设置两个缓冲区,一大一小,大的缓冲区为每次读取的量,小的缓冲区存放每行的数据(确保大小可存放文本中最长的那行梁带)。

读取裤丛的时候判断是不是换行符13,是的话则胡渣樱返回一行数据,不是的话继续读取,直到读完文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8213640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存