2012-11-08 111 views
0

我试图从一个文本文件逐行读取x个字符。所以如果我有:aaaaabbbbbcccccabckcka和即时阅读5,我会得到,aaaaa,bbbbb,ccccc,abckc和ka。我使用的代码是:如何从文本文件中逐渐读取x个字符

  status = is.read(bytes); 
      text = new String(bytes); 

其中字节是:字节=新的字节[5],我打电话的代码直到状态变为-1这两条线,我面临的问题是,输出是不是我上面提到的,但我得到这个:

aaaaa,bbbbb,ccccc,abckc和kackc,注意最后一段'kackc'是垃圾,为什么会发生这种情况?

注意:字节在读取循环之外初始化一次。

+2

你是否在每次迭代时清除你的'byte array'?你可以注意到最后一个输入的最后3个字符不是垃圾,而是你的prevoius输入的最后3个字符。 –

+0

@RohitJain我只是试着把它归零,它的工作原理,谢谢! –

回答

1

您当前的解决方案适用于ASCII,但在许多字符其他编码使用多个字节。您应分别使用Readerchar[]而不是InputStreambyte[]

0

事实证明,我需要我每次读新的输入时间来清除我的字节的缓冲区,我只是用一个for循环零它和它的工作

+2

这完全是错误的解决方案。 * right *解决方案实际上是检查返回值(不仅仅是一个“状态”),所以你知道有多少字节被实际读入'bytes'中。 – ruakh

+0

所以-​​1之前的最后一个返回值,将会有读取的字符数,那么我可以得到该字符串的子字符串? –

+0

请注意,只有当您知道谁在创建文本文件以及可能出现哪些字符时,上述方法才有用。并非所有编码都会为每个字符生成一个字节。 –