我正在使用FileInputStream.read()
方法在Huffman算法上的作业上下文中解析文本文件。
我的文本文件像这样(数字只是行号):
1。
2.S
3.
4。
read()方法的返回分别是:
13,115,10,10
,当我用FileOutputStream
将它们写回另一个文本文件时,新线字符不做newline。
为什么第一行的纽线角色总是13,而另一行的角色10?
我是在使用正确的类还是应该使用不同的流读取器?
为什么Newline字符将它们写回文件时不执行newline?
更新!
好的,对此,读数不是问题。
首先,这是一些代码:
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变量(或在这种情况下是常数)做点事。
既返回(" r",cr,ascii 13)和线feed(" n",lf,ascii 10)是有效的线结尾,并且是在旧的MacIntosh和Unixes。
Windows使用马车返回,然后是LineFeed(" r n",CRLF,ASCII 13,10)。
参见Wikipedia:http://en.wikipedia.org/wiki/newline
创建文本文件的人可能会故意使用不同的线路结尾,或者通过在具有不同线路结束约定的操作系统上编辑文件而偶然地使用。
如果要将文件读为行,则可能要使用BufferedReader
包装InputStreamReader
:
Reader in = new BufferedReader(new InputStreamReader(fileInputStream, encoding));
in.readLine();
关键是您应该将其读为文本(例如,与BufferedReader逐行阅读),而不是二进制。
如果您打印
"rxn" (or the equivalent with numbers)
它确实应该进行线条供稿,但是像Windows Notepad这样的程序将无法识别单个n。
要分析此类情况,您可能需要一个十六进制编辑器。