【问题标题】:why while reading a file we always check for -1?为什么在读取文件时我们总是检查 -1?
【发布时间】:2018-06-10 23:31:38
【问题描述】:

我正在尝试从“read.txt”读取文件,在读取文件时我们总是检查 -1 (line:while(readfile!=-1)。

为什么我们总是通过与“-1”比较来检查结束文件。有什么具体原因吗?

(int readfile = filereadrer.read();) 总是通过这个参数返回 unicode 值 -1 表示文件结尾的 unicode 值,如果是,那么我们如何知道文件结尾的 unicode 值是“-1”

public class FilesPractise {

   public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub

     File file = new File("read.txt");

     file.createNewFile();

     FileReader filereadrer = new FileReader(file);

     int readfile = filereadrer.read();

       while(readfile!=-1){
            System.out.println((char)readfile);

             readfile = filereadrer.read();
    }



}

}

【问题讨论】:

    标签: java file unicode filereader


    【解决方案1】:

    为什么我们总是通过与“-1”比较来检查结束文件。有什么具体原因吗?

    因为如果你不这样做,你将永远不会检测到流的结束,你会无限循环。

    (int readfile = filereadrer.read();) 总是返回 unicode 值

    不,它没有。它返回 -1 Unicode 值。请参阅 Javadoc。

    通过这个论点

    这不是论据。这是一个错误的假设。

    -1 表示文件结尾的 unicode 值

    不存在 (a) Unicode 值 -1 或 (b) Unicode 值作为文件结尾。

    如果是的话

    不是。

    那么我们如何知道文件结尾的 unicode 值为“-1”

    它既不是 -1 也不是 "-1"。它是 API 返回的标记值而不是 Unicode 值。

    【讨论】:

    • 只需澄清一下您是如何知道 104 103 10 的:ASCII 字母 h (U+0068) 后跟 Windows 样式的换行符 (U+000D U+000A)。
    • 因为 13 是 CR,10 是 LF,所以在任何 ASCII 表中都可以找到。关于 104,我什么都没说。
    【解决方案2】:

    这些东西可以在方法的文档中找到。例如,您要查找的方法是read,来自FileReader

    这是read 方法的文档:https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html#read--

    在页面的“退货”部分下,

    读取的字符,如果到达流的末尾则为 -1

    看到了吗?这就是你了解这些事情的方式。

    【讨论】:

    • ,有没有证据证明文件末尾的unicode为-1
    • @sainathpawar 我认为 unicode 中没有负值。 Unicode 字符 END OF TEXT 是 U+0003。 fileformat.info/info/unicode/char/0003/index.htm
    • 是的,你是对的@sweeper,unicode 中没有负值。但是当我尝试打印“System.out.println((char)readfile);”时,没有类型转换为 char (System.out.println(readfile);)我得到的输出为:104 13 10
    • 那么你的呢? @sainathpawar
    • 这里的“13”是不是代表文件结束(U+0003)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多