面试中该如何描述从文件中读出一个字符到控制台全过程

本文详细探讨了一段Java代码从读取文件到打印字符到控制台的全过程,涉及JVM、glibc函数库、Linux内核及磁盘I/O操作。代码中使用FileInputStream读取文件,深入源码发现read()方法最终调用native的read0(),该方法通过glibc调用Linux内核服务,从而实现文件内容的读取和显示。这一过程揭示了Java与操作系统交互的复杂性。
摘要由CSDN通过智能技术生成

这是一道阿里p6面试题,给出如下几行代码,描述下IO读出一个字符到控制台全过程。

public class FileIO {
    public static void main(String[] args) throws IOException {
        File file = new File("C:\\Users\\User\\Desktop\\hello.txt");
        FileInputStream fileInputStream = new FileInputStream(file);
        int read = fileInputStream.read();
        System.out.println((char)read);
    }
}

在这里插入图片描述
初看,这几行代码非常简单,但是能够成为阿里的p6面试题还是有一定难度的。许多程序员写一个读文件中的字符到控制台的代码很轻松,而这里要描述从文件中读出一个字符到控制台的全过程,很多人不清楚这个到底是如何实现的,到底是怎么读的具体要看源码。

从read函数里进去我们能够看到调用的是read0()方法,read0()方法被native修饰,想必很多人很懵吧。

    public int read() throws IOException {
        return read0();
    }

    private native int read0() throws IOException;

执行这些java代码,jvm调用glibc函数库,实际上是glibc函数库里的FileInputStream.c,你没看错,底层调用的是C语言编写的代码。事实上,glibc函数库只是起一个桥梁作用,通过glibc函数库调用linux内核(linux本身并不是一个操作系统,之所以说linux只是一个内核,是因为有另外一个东西调用它成为操作系统,这里并不详细叙述),linux内核有对外暴露的服务(你可以理解为类似微服务),jvm通过glibc函数库调用的就是它,然后linux内核调用磁盘,磁盘再读出文件到控制台。(参考下图)
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

༄༊心灵骇客༣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值