1. 关于InputStream.read()

在从数据流里读取数据时,为图简单,经常用InputStream.read()方法。这个方法是从流里每次只读取读取一个字节,效率会非常低。 更好的方法是用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方法,一次读取多个字节。

2. 关于InputStream类的available()方法

要一次读取多个字节时,经常用到InputStream.available()方法,这个方法可以在读写操作前先得知数据流里有多少个字节可以读取。需要注意的是,如果这个方法用在从本
地文件读取数据时,一般不会遇到问题,但如果是用于网络操作,就经常会遇到一些麻烦。比如,Socket通讯时,对方明明发来了1000个字节,但是自己的程序调用available()方法却只得到900,或者100,甚至是0,感觉有点莫名其妙,怎么也找不到原因。其实,这是因为网络通讯往往是间断性的,一串字节往往分几批进行发送。本地程序调用available()方法有时得到0,这可能是对方还没有响应,也可能是对方已经响应了,但是数据还没有送达本地。对方发送了1000个字节给你,也许分成3批到达,这你就要调用3次available()方法才能将数据总数全部得到。

  如果这样写代码:
 int count = in.available();byte[] b = new byte[count];inputStream.read(b);

在进行网络操作时往往出错,因为你调用available()方法时,对发发送的数据可能还没有到达,你得到的count是0。
需要改成这样:

int count = 0;
while (count == 0) {count = in.available();
}
byte[] b = new byte[count];
in.read(b);

3. 关于InputStream.read(byte[] b)和InputStream.read(byte[] b,int off,int len)

这两个方法都是用来从流里读取多个字节的,有经验的程序员就会发现,这两个方法经常 读取不到自己想要读取的个数的字节。比如第一个方法,程序员往往希望程序能读取到b.length个字节,而实际情况是,系统往往读取不了这么多。仔细阅读Java的API说明就发现了,这个方法 并不保证能读取这么多个字节,它只能保证最多读取这么多个字节(最少1个)。因此,如果要让程序读取count个字节,最好用以下代码:

 byte[] b = new byte[count];int readCount = 0; // 已经成功读取的字节的个数while (readCount < count) {readCount += in.read(bytes, readCount, count - readCount);
}

用这段代码可以保证读取count个字节,除非中途遇到IO异常或者到了数据流的结尾(EOFException)

InputStream的available()方法(读文件)相关推荐

  1. spring batch 通过配置文件的方法读文件

    spring batch提供了多种方式读数据,比如读文件,读数据库,读xml等,提供了丰富了实现类操作,也可以根据自己的需求实现接口ItemReader去自定义. 工作中我们常用的是读文件(.csv. ...

  2. 读一个文件的java程序_java 读文件的几种方法(一)

    先前使用一直很混乱的使用过这些方法,但都没有好好做过总结. 这两天趁有空,小结一下. 1.输入输出流 说起 java的 读写文件不得不说java中的输入输出流对象, 被读取的对象为输入流(如某个文件, ...

  3. java 读文件 二进制_JAVA中读取文件(二进制,字符)内容的几种方法总结

    JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代码,需要的可以直接复制使用 public cla ...

  4. python写文件读文件-Python 读写文件和file对象的方法(推荐)

    1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.tx ...

  5. PHP使用feof()函数读文件的方法

    这篇文章主要介绍了PHP使用feof()函数读文件的方法,以实例形式对比了正确与错误的用法,阐明了feof()函数的使用技巧,需要的朋友可以参考下 本文实例讲述了PHP使用feof()函数读文件的方法 ...

  6. Bash脚本:怎样一行行地读文件(最好和最坏的方法)

    用bash脚本读文件的方法有很多.请看第一部分,我使用了while循环及其后的管道命令(|)(cat $FILE | while read line; do - ),并在循环当中递增 i 的值,最后, ...

  7. Java读 写文本_java读文件写文件的方法

    java读文件写文件的方法 有的时候经常为真么读写文件最合理发愁,因为JAVA提过读写文件的方式太多了(C更甚至,fopen & open又有多少人傻傻分不清,更别说ReadFile了).今天 ...

  8. Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n

    Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n 首先, 让我们看下数据demo.txt, 就两行数据. 35durant teamGSW 1 ...

  9. matlab中读文件的行数_【Matlab】 读取文件各种方法

    本技术支持指南主要处理:ASCII, binary, and MAT files.要得到MATLAB中可用来读写各种文件格式的完全函数列表,可以键入以下命令: help iofun MATLAB中有两 ...

  10. Java8读文件的方法

    JDK7中引入了新的文件操作类java.nio.file.File,它包含了很多有用的方法来操作文件,比如检查文件是否为隐藏文件,或者是检查文件是否为只读文件.开发者还可以使用Files.readAl ...

最新文章

  1. RH系列linux上编译android2.3(gingerbread)
  2. 插值算法C实现(一元全区间)
  3. 有机化学芳烃 芳香性
  4. python中打印zip()函数结果和zip()函数的使用
  5. OpenStack_I版 1.准备过程
  6. POJ 计算几何(3)
  7. 解密Arm Neoverse V1 和 Neoverse N2 平台 为下一代基础设施带来计算变革
  8. 苹果电脑更改sd卡只读_SD卡变为只读系统
  9. 移动开发之手势与双指缩放
  10. Android移动应用基础教程【使用内容提供者共享数据】
  11. python函数后面的点_对python函数后面有多个括号的理解?
  12. python批量加微信好友_python如何自动批量添加微信好友并修改备注
  13. 电脑变WIFI:建立虚拟共享WIFI热点可查看WIFI密码windows中使用bat批处理命令提示符cmd创建教程含工具
  14. 买服务器需要看哪些参数,如何看服务器配置
  15. 电脑的任务栏只显示一条杠,没有图标怎么解决,看这里!!!
  16. 幼儿教师个人简历模板范文
  17. ZMQ特点及消息模式
  18. OJ:GPLT L3-008 喊山 BFS模板题
  19. php云4.5旗舰版,PHPYun 5.0
  20. 你不会还不知道B/S与C/S的区别吧?

热门文章

  1. c语言pow函数算力,c语言pow函数算力
  2. 什么叫取反_PLC指令中的取反是什么意思
  3. 课程计划、课程标准、教材三者关系
  4. C++ 组合 (Composition)
  5. 快速幂算法(qwe)
  6. 《东周列国志》第二十回 晋献公违卜立骊姬 楚成王平乱相子文
  7. C++异常处理底层机制详解
  8. 微信社群运营是什么,如何做好社群运营?
  9. c语言 中的求和函数,0基础理解C语言调用汇编实现求和函数
  10. oracle 统计标准误差,标准偏差和标准误差的区别