InputStream使用read()方法 时,判断尾标记许主意的问题
来源:互联网 发布:感觉身体被掏空 知乎 编辑:程序博客网 时间:2024/04/28 06:57
先看下面一段代码:
- //同过判断文件的结尾来读取文件
- import java.io.File;
- import java.io.InputStream;
- import java.io.FileInputStream;
- public class InputStreamDemo02
- {
- public static void main(String args[]) throws Exception{
- File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
- InputStream in = new FileInputStream(f);
- byte b[] = new byte[1024];
- int len = 0;
- int temp=0; //所有读取的内容都使用temp接收
- while((temp=in.read())!=-1){ //当没有读取完时,继续读取
- b[len]=(byte)temp;
- len++;
- }
- in.close();
- System.out.println(new String(b,0,len));
- }
- }
运行结果为:Hello,java
在此代码中如果我不使用temp进行接收每次读取的内容,而直接操作每次读取的内容会怎么样呢?看下面的代码:
- //同过判断文件的结尾来读取文件,不使用temp对读取的每个字节进行接收时,对比InputStreamDemo01.java
- import java.io.File;
- import java.io.InputStream;
- import java.io.FileInputStream;
- public class InputStreamDemo03
- {
- public static void main(String args[]) throws Exception{
- File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
- InputStream in = new FileInputStream(f);
- byte b[] = new byte[1024];
- int len = 0;
- //int temp=0;
- while((in.read())!=-1){ //当没有读取完时,继续读取
- b[len]=(byte)in.read();
- len++;
- }
- System.out.println(new String(b,0,len));
- }
- }
运行结果为:el,aa
造成这一结果的原因是什么?
观察可以发现,运行结果是跳跃的,每一个内容与上一个内容都间隔了一个字符。再阅读代码发现:in.read()被调用的两次,所以原因也就出来了:原因是有两次调用in.read(),in.read()是读取下一字节,导致b[]中存储的是跳跃的,即每次存入其中的都与上一个内容相差一个字节。问题并不复杂,重要的是自己书写时可能会造成这样的错误,所以一定要使用temp对读取的内容进行接收,同时只操作temp。发现问题和解决问题时,细心耐心很重要。
0 0
- InputStream使用read()方法 时,判断尾标记许主意的问题
- Inputstream读取文件,使用read()方法,判断尾标记需要注意的问题
- 慎用InputStream的read()方法
- Socket得到的InputStream,read方法阻塞的问题
- InputStream的read方法读取字节不完全的问题
- Socket编程InputStream中的read()方法的问题!!!
- InputStream 中 available() 方法的使用问题
- InputStream的read方法的超时处理
- 【IO】InputStream的read(byte[] b)方法
- InputStream read()方法
- InputStream中read的使用理解
- Android -- 小问题 InputStream的read方法读取字节不完全的问题
- InputStream的三个read()
- inputStream的read用法
- 关于InputStream 中available()方法的使用问题
- InputStream中的三个read方法
- InputStream read()方法详解
- Socket中InputStream的read方法的阻塞特性
- php配置文件php.ini的中文注释版
- Apache 初级URL重写指南
- 抓取豆瓣电影
- phonegap 开发中我遇到的一些坑
- Nginx 基础篇(序)---转发代理服务器与反向代理服务器
- InputStream使用read()方法 时,判断尾标记许主意的问题
- Unity3D NGUI Localization国际化
- 黑马程序员_Eclipse介绍及使用
- Java程序时间和空间性能优化Tip
- android中图片的三级cache策略(内存、文件、网络)之三:文件缓存策略
- maven入门
- android中左右滑屏的实现(广告位banner组件)
- ubuntu MongoDB配置+后台运行
- WinPcap编程1——简介