当前位置: 首页 > 面试题库 >

Java中BufferedReader.readLine()的最大行长?

朱修德
2023-03-14
问题内容

我使用BufferedReader的readLine()方法从套接字读取文本行。

没有明显的方法来限制读取行的长度。

我担心数据源会(恶意或错误地)写很多数据而没有任何换行符,这将导致BufferedReader分配无限量的内存。

有办法避免这种情况吗?还是我必须实现readLine()自己的受限版本?


问题答案:

最简单的方法是实现您自己的边界线阅读器。

或者更简单,重复使用代码这个BoundedBufferedReader类。

实际上,编写readLine()与标准方法相同的代码并不是一件容易的事。正确处理3种行终止符需要一些非常仔细的编码。比较上面链接与Sun版本和BufferedReader的Apache
Harmony版本
的不同方法很有趣。

注意:我并不完全相信有界版本或Apache版本都是100%正确的。有界版本假定基础流支持标记和重置,但这并不总是正确的。如果Apache版本将CR视为缓冲区中的最后一个字符,则它会预读一个字符。在读取用户键入的输入时,这会在MacOS上中断。Sun版本通过设置一个标志来处理此问题,该标志将导致CR在下一个read...操作中被跳过之后可能的LF
。即没有虚假的预读。



 类似资料:
  • 问题内容: 我正在重写我的一个Android应用程序以利用NDK,并且它每次要做的第一件事之一是打开一个1.5MB的文本文件(大约15万行),并将每一行放入数据中结构体。当我使用Java的BufferedReader.readLine()进行此操作时,从SD卡读取文件大约需要2.5秒。这是我用于此的代码: 将C 与ifstream一起使用需要更长的时间…对于同一文件大约需要3分钟。这是我在C 中使

  • 问题内容: 我想将这个大字符串分成几行,每行中的内容不应超过MAX_LINE_LENGTH个字符。 到目前为止我尝试过的 输出: 它造成 断字 。我不要这个 而不是我想要这样的输出: 添加了另一个条件: 如果单词长度大于MAX_LINE_LENGTH,则该单词应拆分。 解决方案应该没有外部罐子的帮助。 问题答案: 只需逐个单词地遍历字符串,并在单词超过限制时中断。 我只是以徒手的方式输入了该内容,

  • 问题内容: 我知道Java中一个方法的最大大小为64k。如果超过该限制,我们将收到一个编译器警告,例如“代码太大而无法编译”。所以我们可以称这为Java的缺点吗? 我们可以增加这个大小限制,还是真的有可能增加? 关于此方法大小还有其他想法吗? 问题答案: 以我的经验,64KB的限制只是生成代码的问题。尤其是 初始化大型数组时(通过代码完成) 在结构良好的代码中,每种方法的长度都是可管理的,并且比此

  • 问题内容: 我有一张价格变动表,我需要获取初始价格和最新价格。换句话说,我想在每种产品的一行中显示min(StartDate)和max(StartDate)的价格值。 表的结构很简单: 所需的结果是 问题答案: SQLFiddle演示

  • 问题内容: 我想限制a的最大大小,以对正在实现的各种哈希算法进行度量。我在的一个重载构造函数中查看了loadfactor 。 我尝试在构造函数中将loadFactor设置为0.0f(这意味着我不希望HashMap的大小从EVER增大),但将此无效: 还有另一种方法来限制它的大小,使其永远不会增长吗? 问题答案: 有时越简单越好。

  • 我正试图通过应用筛选器获得最高值 我有一个对象,它包含一个团队对象和一个卡片列表。所以我需要从卡权重属性中的卡列表中获得最高值,这里的队伍是A,并返回玩家。 错误: 请帮帮我,这是学术工作用的