首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java类BufferedReader大小

Java类BufferedReader大小
EN

Stack Overflow用户
提问于 2016-10-26 12:17:28
回答 1查看 307关注 0票数 1

我要去上BufferedReader课了。这是我的测试。我用1024行创建了一个简单的txt文件:"test.txt“。每一行包含行号和文件名(例如:“1-test.txt”):

测试文件创建:

代码语言:javascript
运行
复制
$ for i in {0..1023}; do echo "$i - test.txt" >> test.txt; done
$ ls -la test.txt
-rw-r--r--    1 osb      osb           12288 Oct 26 12:01 test.txt

用于我的测试的Java类(f是File类的变量):

代码语言:javascript
运行
复制
...
while (f.exists())
    {
        BufferedReader br = null;

        try
        {

            br = new BufferedReader( new FileReader( f ), 10);

            while ((line = br.readLine())!=null)
            {
                System.out.println (line);
                Thread.sleep(1000);
            }

        }

        ...
        catch excepion
        ...

        finally
        {
            try
            {
                br.close();
            }
            catch (IOException e)
            {
                System.out.println ("\nError closing Buffer reader!");
                e.printStackTrace();
            }
            br = null;
            line = null;
        }

    }
...

当应用程序开始编写行时,我执行以下unix命令:

代码语言:javascript
运行
复制
gzip test.txt

我期望出现异常,因为缓冲区大小比un行小( 10字节),但是应用程序读取所有1024行,并且只有在到达文件末尾时才会引发异常(文件不存在!)。BufferedReader是否有大于10的缓冲区大小?有最小缓冲区大小吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-26 12:22:52

你的问题基本上是你的假设根本不符合现实。

您认为Java代码直接“与某个驱动器上的某个文件”交互。

但实际上,在“java代码”和“事物”之间有几个层。首先也是最重要的: Linux内核。即使在使用BufferedReader时,程序一开始运行,Linux内核也很可能已经读取了小文本文件的全部内容。因此,您的“读取”代码根本没有注意到底层文件在此期间被重命名了!

最后,当您关闭缓冲区时,JVM会注意到事情是不正常的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40262079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档