加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 将一个正则表达式应用于一个字符串,该字符串是一个缓冲

发布时间:2020-12-15 08:43:27 所属栏目:Java 来源:网络整理
导读:我正在读取一个我无法一次缓冲的文件,因为它的大小范围从256MB到2GB. 打开文件后,我将其中一大块读入一个字节数组,比如512字节,将其转换为字符串并在其上运行正则表达式,如果检测到模式,我的程序会记下它. 我遇到的问题是我的程序缺少文件中应该检测模式的许
我正在读取一个我无法一次缓冲的文件,因为它的大小范围从256MB到2GB.

打开文件后,我将其中一大块读入一个字节数组,比如512字节,将其转换为字符串并在其上运行正则表达式,如果检测到模式,我的程序会记下它.

我遇到的问题是我的程序缺少文件中应该检测模式的许多位置.

我90%确定问题是虽然模式存在,但它并不完整,因为它超出了缓冲区的长度.我正在寻找的模式长度为8个字节,例如,模式的前四个字节位于数组的最后四个位置;所以当它再次填充时,数组的前四个字节是模式的最后四个字节.因此,我的正则表达式总是失败.

我猜我需要做的是填充缓冲区,然后当它再次填充时,保留最后20个左右的字节,这样它就不会错过我正在寻找的任何模式.

任何建议将不胜感激.提前致谢.

托尼

解决方法

首先,您不能将 Java正则表达式应用于字节数组.您必须将它应用于String.因此,您必须从byte []转换为String,并且您可能(a)使用错误的编码,或(b)截断中间的字符串.

一旦你完成了这个,你需要使用流媒体规则来重新构建你所阅读的内容.我可以描述一个可能适用或不适用的:

>将大量数据读入缓冲区.
>找到缓冲区中的最后一个句子边界.
>从开始到边界的过程.
>将余数移到缓冲区的前面.
>从源中重新填充其余缓冲区.
>泡沫,冲洗,重复.

如果这是一个普通的字符文件,那么修改如下:

Reader r = new InputStreamReader(inputByteStream,Charset.forName("utf-8"));

然后应用上面的算法以避免缓冲区边界条件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读