File a = new File("D:/1.txt");
FileInputStream b = new FileInputStream(a);
int c ;
while((c = b.read())!=-1){
System.out.println((char)c);
}
这里,Stream是字节流,输出为一个字节的char我也就认了,为什么是int?
百度了一下,大家说返回的int是字节数量,但是这个“字节数量”输出是我文本里的内容,不懂,大神呢
FileInputStream b = new FileInputStream(a);
int c ;
while((c = b.read())!=-1){
System.out.println((char)c);
}
这里,Stream是字节流,输出为一个字节的char我也就认了,为什么是int?
百度了一下,大家说返回的int是字节数量,但是这个“字节数量”输出是我文本里的内容,不懂,大神呢
解决方案 »
- java的wait 吊起线程的时候 会不会释放synchronized锁呢
- jdk编译运行问题
- '\r'与'\n'到底有何区别啊?请高手指教!
- 求java j2se编制的一个小游戏程序
- 怎么设置java的环境变量
- 在JTree中为什么不可以implements TreeSelectionListener,程序如下:&&异常如下::
- JAVA中如何在写文件时指定所用的编码
- jdk 的问题
- Java Mail 的问题,请各位高手请赐教
- 我要用Java编写一个通用权限管理模块,大伙有什么好的建议?
- 运行时异常如何使用log4j进行管理
- 没弄懂这2段代码的结果有何区别,有何玄机呢?try catch知识点
2. byte buf[] = new byte[1024];
c=b.read(buf); 这个才是所读取的字节数,也是int,如果数据足够多的话c=1024,没那么多的话,buf有数据部分长度就是c了
FileInputStream是字节流,读出来自然是一个字节,但b.read()返回的却是int,为何不是byte呢?因为byte正好是一个字节,是一个有符号的数据,不便于处理,最主要的是它无法表示是否成功读到数据。而int的表值范围比较大,可用0~255来表示读到的字节值,而读到的若是-1,则表示没能读到数据。
其次,read返回的是int。因为读取的字节,如果文本中内容是-1,那么它会读到-1,但这不表示读取结束!那怎样区分文本的-1和结束标志-1呢?这时可以将byte提升为int,然后与上255取其低八位。问题就解决了!
如果文本中内容是-1,你是读不到-1的,你读的‘-’的ASCII码,再次读读到的是‘1’的ASCII码。
如果文本中内容是-1,你是读不到-1的,你读的‘-’的ASCII码,再次读读到的是‘1’的ASCII码。
嗯,那个应该不是文本,该怎么说呢,文件以二进制字节形式来读取时读到-1,记得看视频时,让我们学着写一个read( ),当时是这样理解的!不是这样吗?
import java.io.IOException;public class Demo6 { public static void main(String[] args){
FileInputStream fileInput = null;
try{
fileInput = new FileInputStream("D:\\a.txt");
int c = 1;
//返回的是一个8位的数字,之所以返回类型是int而不是char,因为可能返回-1,文件结束标示EOF
while((c = fileInput.read()) != -1){
System.out.printf("%c",c);
}
}catch(Exception e){
}finally{
try {
fileInput.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}