我是Java新手。我正在学习fileIO。我正在写一个小程序来显示txt文件中的内容。我的代码如下:
import java.io.*;
public class Readf {
public static void main(String arg[]) throws IOException {
FileInputStream in = null ;
try {
in = new FileInputStream("input.txt");
int c;
String cs="";
while ((c=in.read())!=-1) {
cs = cs + (char)c;
if ((char)c=='\n') {
System.out.println(cs);
cs="";
}
}
} finally {
if (in != null) {
in.close();
}
}
}
}
我正在阅读在线教程。它告诉我用int变量读取文件。因为我想在char中显示内容,所以我将它们转换为char类型并将其存储到sting中并且它已经工作了!在Java中,int变量是32位,但char变量是16位。每当我读取32位int时,我将它们转换为16位字符。为什么结果不是混乱?
答案 0 :(得分:1)
检查FileInputStream类中的read()方法描述:
正如您在规范中所看到的,读取方法"从此输入流中读取一个字节的数据"这意味着程序中的所有内容(c变量)将始终小于或等于255且大于或等于0.如果您读取txt文件或pdf,png等,则无关紧要。
您可以通过在c大于255时尝试打印来检查它,例如:
if (c > 255) {
System.out.println("c>255");
}
和" c> 255"永远不会被打印出来。
因为int已签名,您还可以检查c是否小于零。
if (c < 0) {
System.out.println("c<0");
}
再次&#34; c&lt; 0&#34;永远不会打印出来。
当然只有最后一个int为-1。
因此,范围&lt; 0,255&gt;范围内的每个int都是可以安全地转换为char而不会丢失任何信息。
答案 1 :(得分:0)
您可能保留在文件中的所有字符都在java工作的16位unicode字符集的范围内。因此,将char(16位)转换为int(32位)或反之亦然。
答案 2 :(得分:0)
实际上,我尊重你坚持理解而不是仅仅获得所需的输出。
问题在于,您扫描的每个字符的ascii值都低于2 ^ 8,这使得它适合int
32位并且适合char
16位。
你所采取的混乱将出现在一个ascii值适合32位而不是16位的情况下,它不会存在于ascii字符集中,而是存在于unicode中。