我是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类型并将其存储在字符串中,并且可以正常工作!!!!在Java中,int变量是32位,而char变量是16位。每次读取32位int时,我都会将它们转换为16位char。为什么结果不是那么混乱?

最佳答案

检查FileInputStream类中的read()方法描述:

FileInputStream.read()

正如您在规范中所看到的,一种读取方法“从此输入流读取一个字节的数据”,这意味着程序中的所有int(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");
}


再次不会打印“ c
当然,仅最后一个int将为-1。

因此,可以将范围中的每个int安全地转换为char而不丢失任何信息。

09-30 14:21
查看更多