InputStreamReader读取13和10以进行回车。为什么?

时间:2014-01-21 16:09:16

标签: java int byte streamreader streamwriter

我正在使用FileInputStream.read()方法在Huffman算法的家庭作业的上下文中解析文本文件。

我的文本文件是这样的(数字只是行号):

  

1。
  2.S
  3.
  4。

read()方法的返回分别为:

13,115,10,10

当我用另一个带有FileOutputStream的文本文件写回来时,换行符不会换行。

为什么第一行的换行符总是13而其他的换行符是10?
我使用的是正确的课程还是应该使用不同的流媒体阅读器? 当我将换行符写回文件时,为什么换行符不会换行呢?

UPDATE!

很抱歉,阅读不是问题。

首先,这是一些代码:

FileOutputStream fos = new FileOutputStream(fileOut);
fos.write(115); //s
fos.write(13);  //newline
fos.write(115); //s
fos.write(10);  //newline
fos.write(10);  //newline

当我在记事本中打开文件时,我看到:

1.ss
2。

我想我必须对int变量(或本例中的常量)做一些事情,但我不知道是什么。

2 个答案:

答案 0 :(得分:1)

回车符(“\ r”,CR,ASCII 13)和换行符(“\ n”,LF,ASCII 10)都是有效行结尾,并且分别是旧Macintoshes和Unix上使用的约定。

Windows使用回车后跟换行符(“\ r \ n”,CRLF,ASCII 13,10)。

参见维基百科:http://en.wikipedia.org/wiki/Newline

创建文本文件的人可能是故意使用不同的行结尾,或者是通过编辑具有不同行结束约定的操作系统上的文件而意外使用。

如果您想将文件作为行读取,可能需要使用BufferedReader包裹InputStreamReader

Reader in = new BufferedReader(new InputStreamReader(fileInputStream, encoding));

in.readLine();

答案 1 :(得分:0)

重点是你应该把它读作文本(例如,用BufferedReader逐行读取),而不是二进制。

如果您打印

"\rx\n" (or the equivalent with numbers)

它确实应该换行,但像Windows记事本这样的程序将无法识别单个\ n。

要分析此类情况,您可能需要一个十六进制编辑器。