/*
 * 字节流和字符流的read()方法为什么返回的是int类型?而且为什么用-1作为判断是不是流末尾?
 */

package cn.itcast.day_16;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class ReadMethodDemo {

public static void main(String[] args) throws IOException {
  FileReader fr = new FileReader("src.txt");
  fr.read();

/*
   * 如果返回char, 那么无法表示流末尾.
   * char的取值范围是从0到65535
   * 这个范围内的所有字符, 都有可能在数据中出现
   * 我们需要使用一个不可能在数据中出现的值来表示流末尾
   * 那么Java中就是用-1来表示这个末尾的, 因为-1不会在数据中出现
   * 而为了返回-1, 那么只能用int
   * 当流中读取到一个字符时, read()方法内部就会当作int返回, 如果读到流末尾, 直接返回-1
   */
  
  FileInputStream fis = new FileInputStream ("src.jpg");
  //fis.read();

int b;
  while((b = fis.read()) != -1)
   System.out.println((byte)b);               //打印的结果全是正数
  
  /*
   * 如果返回byte, 同样无法表示流末尾.
   * byte的取值范围是从-128到127
   * 这个范围内所有的数据, 都有可能在数据中出现
   * read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和流中的数据重复
   *
   * 字符流中读取到的char是直接当作int使用, 例如读取到一个'a'也就是97的时候, 那么就相当于返回了一个int的97
   * 字节流中不能这么做, 因为如果文件中存在数据-1, 把-1直接当作int返回还是-1, 那么就无法区分这个读到的结果是流末尾还是流中的数据了
   *
   * read()方法内部将读取到的所有字节高位补0转为int返回, 这样做所有的数据都会是正数
   * 这时就可以用-1表示流末尾了
   * 而改变后的数据只要强转回byte, 就可以得到原有数据
   */
 }

}

Java中字节流和字符流的read()方法为什么返回的值是int类型相关推荐

  1. 四十、Java中字节流和字符流介绍和区别

    @Author:Runsen @Date:2020/6/6 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  2. Java中字节流和字符流的比较(转)

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...

  3. 【转】文本文件和二进制文件区别及java中字节流和字符流归纳

    首先在物理上文本文件和二进制文件并没有区别,都是以二进制01的形式存放于存储介质中,他们的区别只是逻辑上的区别,这两种方式只是在编码层次上有差别.文本文件是基于字符编码的文件,常见的编码有ASCII编 ...

  4. java中字符流和字节流的区别_java中字节流和字符流有哪些区别

    java中字节流和字符流的区别有:1.定义不同:2.结尾不同:3.处理方式不同:4.缓冲区不同:5.编码方式不同.字节流默认不使用缓冲区,而字符流使用缓冲区.字节流采用ASCII编码,字符流采用uni ...

  5. Java IO 字节流与字符流 (三)

    概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...

  6. java.IO字节流和字符流详解

    IO流的分类 在学习字节流和字符流之前因该先学习IO流的分类,效果会更好 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input).或者叫做读(Rea ...

  7. Java测试字节流和字符流,以及带缓存的字符流读取速度对比

    测试用的文件为txt格式文件,大小为2.12MB package IO;import java.io.BufferedReader; import java.io.File; import java. ...

  8. Java IO 字节流、字符流详解

    1. 字节流与字符流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接.类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流 ...

  9. java中什么是字节流和字符流_java中字节流与字符流的区别是什么

    字节(Byte)是进行io操作的基本数据单位,在程序进行字节数据输出时可以使用OutputStream类完成 此类定义如下: public abstract class OutputStream ex ...

  10. Java文件字节流和字符流FileInputStream,FileOutputStream,FileReader,FileWriter

    一,文件输入流和文件输出流:FileInputStream,FileOutputStream FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用re ...

最新文章

  1. C#后台访问前台Html控件的方法
  2. java登录中用户类型分类_基于用户登陆的struts2中action的分类详解
  3. 基于SharePoint 的企业信息平台架构
  4. CVPR 2021 最佳论文!对抗神经网络GAN解决3D场景难题
  5. 最新图解 github 修改github地址 用户名
  6. JavaWeb后端代码自动生成工具
  7. Linux高级命令find,grep,sed,awk
  8. 32-【算法与数据结构】伪代码与流程图
  9. Selenium(2): DOM元素定位、操作
  10. python中常用英语口语_常用英语口语100句(超实用)_
  11. 获取Keycloak的Token示例
  12. python简单程序实例-python简单项目实例
  13. 极光推送在APICloud平台的使用教程
  14. 解决idea在运行时出现Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8?
  15. 传智播客python培训怎么样
  16. android什么意思?Android岗面试12家大厂成功跳槽,Android校招面试指南
  17. AAAI‘22 推荐系统论文梳理
  18. 51nod3121 小陶与杠铃片
  19. 机器学习之必备知识篇
  20. uniapp部分安卓字体加粗问题

热门文章

  1. 前端工程师和python工程师收入哪个高_前端工程师和后端工程师工资哪个高
  2. #Android-中控指纹仪Live R20 开发注意事项#
  3. 黑马python入门笔记(部分)
  4. 史上最详细教你制作“U盘启动盘”重装Windows10系统
  5. 数据安全平台——DSP
  6. 【GitHub】README.md文件中 markdown语法 插入超链接
  7. 中国石化股票价值线分析
  8. 【日语】英语26个字母的日语读法
  9. Vue中部署百度富文本编辑器UEditor及其自带的后端,并加入秀米插件
  10. Rayman的绝顶之路——Leetcode每日一题打卡1