这篇是关于JAVA中EOF标识的讲解,之前在工作上碰到过一个问题,有人问过,不能通过判断EOF来知道文件有没有读取完毕吗?其实,还真不能。

直接从JDK接口文档入手,以FileInputStream为例,JDK接口文档给出了明确的说明:

使用FileInputStream的read方法读取文件时,当返回-1就表明读到了文件末尾,如果期间出现IO异常,则会抛出一个IOException。而对于EOF文件结束符,其实是不存在的。在Linux系统之中,EOF根本不是一个字符,而是当系统读取到文件结尾,所返回的一个信号值,例如在C语言中,EOF是一个定义在头文件stdio.h的常量,一般等于-1。对于JAVA的实现,我们可以通过查看FileInputStream的源码查看,如下:

其中read0为native方法,需要查看jvm源码。根据JVM源码定位进去,发现read0调用readSingle方法:

而readSingle方法位于io_util.c中:

所以,其实read方法最后还是调用了操作系统的read方法,该方法跟具体的操作系统相关,在linux下,有如下的说明

也就是,当使用read方法去读文件时,如果读到了文件末尾,没有字符返回时,则该方法返回0,如果出现异常,则返回-1.然后,JDK在readSingle方法里进行了包装,如果返回0,则在JDK层面返回-1,如果返回-1,则抛出IOException.因而,JAVA中没有EOF这个标识符,而是使用-1来标识文件结束。

个人公众号:啊驼

java eof_Java的EOF标识?相关推荐

  1. java 怎么输入eof_java输入eof

    第一个问题,两段代码的区别在于阻塞的位置不同,加上一行输出代码就可以很明显地看到差别. public class Test { public static void main(String[] arg ...

  2. 请选择JAVA中有效的标识_Java中有效的标识符是什么?

    Java中的有效标识符–必须以字母(A到Z或a到z),货币字符($)或下划线(_)开头. 在第一个字符之后可以有任何字符组合. 不能是关键字. 示例 以下示例显示了用于在Java中声明变量的各种可能的 ...

  3. java 复杂报表_Java+POI+模板”一:打造复杂Excel 报表

    1 设计思路 Java 对于Excel 的操作一般借助于POI 类库,由于有些报表的表头比较复杂,直接用POI 控制报表的生成比较困难,这时可以先制作Excel 报表模板,而后再通过Java 调用PO ...

  4. 重新精读《Java 编程思想》系列之final关键字

    在java中final关键字标识无法被修改.接下来从final修饰数据.方法和类进行介绍. final数据 final用来告知编译器这一块数据是恒定不变的.数据恒定不变又如下作用: 1.一个永不改变的 ...

  5. Java基础之一组有用的类——生成日期和时间(TryDateFormats)

    控制台程序. java.util包中含有相当多的类涉及日期和时间,包括Date类.Calendar类和GregorianCalendar类. Date类对象其实定义了精确到毫秒的时刻,从1970年1月 ...

  6. Java和JavaScript区别与联系

    Java和JavaScript有啥区别,据说还有很多人不知道,来给大家科普一下两者区别! Java 和 JavaScript 不同之处: 1.用处不一样: 它们最本质的不同就是用途:Java目前被广泛 ...

  7. Java IO流之对象流

    对象流 1.1对象流简介 1.2对象流分类 输入流字节流处理流:ObjectInputStream,将序列化以后的字节存储到本地文件 输出流字节流处理流:ObjectOutputStream 1.3序 ...

  8. java能够运行的原理_JAVA程序运行原理分析(一)

    作为JAVA的开发人员,需要知道JAVA是如何运行的,这个需要好好思考下. (一)class文件内容 class文件包含JAVA程序执行的字节码,也就是说程序的执行是通过class里面的内容进行执行的 ...

  9. java事件监听器无效_Java的事件监听器学习心得

    在Java的swing编程中,Java中的事件机制非常常用 一. 事件监听器的参与者: 1.事件对象: 一般继承自java.util.EventObject对象,由开发者自行定义. 2.事件源: 就是 ...

最新文章

  1. 世界最优秀的分布式文件系统架构演进之路
  2. (完全解决)(numba)TypingError: Failed in nopython mode pipeline( Invalid use of Function)
  3. OpenGL.error.NullFunctionError: Attempt to call an undefined function”解决方案
  4. 扇贝编程python是干嘛的-产品观察 | 以对话式互动学习撬动转化,扇贝编程瞄准职教市场...
  5. 如果在chrome的新标签中继续打开开发工具
  6. foxpro:将表写入excel
  7. 贺岁喜剧《高兴》山寨歌舞大狂欢 陕西话的RAP
  8. 【实践】LightSeq:高性能NLP序列推理实践-字节跳动.pdf(附下载链接)
  9. 在什么情况下自己应该辞职走人了,而不是等领导下“逐客令”?
  10. 读WebTrends的Javascript源码笔记
  11. matlab latex 中文字体,LaTeX - 设置中文字体
  12. java 二叉树转数组_java二叉树怎么转成数组?java怎么实现二叉树?
  13. API接口设计的五大公共参数
  14. android 判断是否安装百度地图,判断手机是否安装高德/百度地图
  15. 计算机继续教育笔记,第三轮继续教育自学读书笔记
  16. android网络转圈,网络请求时显示正在请求转圈
  17. yolov5s.yaml中各参数作用意义及使用netron工具来可视化yolov5s的结构
  18. k8s报警 FailedCreatePodSandBox
  19. C语言判断一个密码是不是安全的
  20. 记一次layui开发时,form表单提交post请求变为get请求的情况

热门文章

  1. 51单片机学习笔记1 简介及开发环境
  2. 概率论—高中基础知识
  3. lwip简介及基础知识
  4. android之解锁新技能,平常的应用开发会用到的东东(持续更新)android工作经验总结
  5. 全球导航卫星系统集成电路行业调研报告 - 市场现状分析与发展前景预测
  6. CPU环,特权和保护
  7. Vue3的动态组件和异步组价
  8. [CF1045C]Hyperspace Highways
  9. paddinglfet和marginleft区别
  10. SquirrelMail 汉化