Java中字节流和字符流的read()方法为什么返回的值是int类型
来源:互联网 发布:深圳发展中公司 知乎 编辑:程序博客网 时间:2024/06/05 14:45
Java中字节流和字符流的read()方法为什么返回的值是int类型
/*
* 字节流和字符流的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, 就可以得到原有数据
*/
}
}
/*
* 字节流和字符流的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, 就可以得到原有数据
*/
}
}
0 0
- Java中字节流和字符流的read()方法为什么返回的值是int类型
- Java中字节流和字符流的read()方法为什么返回的值是int类型
- Java中字节流和字符流的read()方法为什么返回的值是int类型
- Java 编程下 IO 中的输入流的 read() 方法返回值为什么是 int 值
- Java 编程下 IO 中的输入流的 read() 方法返回值为什么是 int 值
- Java 编程下 IO 中的输入流的 read() 方法返回值为什么是 int 值
- java 编程下 IO 中的输入流的 read() 方法返回值为什么是 int 值
- Java 编程下 IO 中的输入流的 read() 方法返回值为什么是 int 值
- 为什么read()方法返回的是int类型而不是byte
- java.io.FileInputStream.read()的返回值类型为什么是int而不是byte
- 关于java字节流的read()方法返回值为int的思考
- 为什么IO读取流的read方法返回的是int而不是byte的原因!
- (转)为什么IO读取流的read方法返回的是int而不是byte的原因!
- java基础--Java 字节读取流的read方法返回int的原因
- java基础--Java 字节读取流的read方法返回int的原因
- 关于java字节流的read()方法返回int型而非byte型的思考
- 关于java字节流的read()方法返回int型而非byte型的思考
- Java 编程下 IO 中的输入流的 read() 方法返回值为什么是 int 值(科普一下吧,某个大侠写的)
- CVPR 2017-01-19
- 色彩搭配速成!3个实用方法帮你全面搞定配色
- android renderscript 初探
- 关联容器--map和set
- dubbo的初级例子搭建
- Java中字节流和字符流的read()方法为什么返回的值是int类型
- 常见性能优化策略的总结
- 删除重复内容行
- javafx TableView中的TableColumn如何填充的自带类,以及编辑单元格
- 2017.1.19 bug总结
- Git与github基本操作
- 网页游戏开发入门教程三(简单程序应用)
- linux下python安装Mysql扩展
- 软件测试笔记2-目的