java的io
来源:互联网 发布:女生身高知乎 编辑:程序博客网 时间:2024/06/11 08:49
1.BufferedOutputStream
在介绍FileInputStream和FileOutputStream的例子中,使用了一个byte数组来作为数据读入的缓冲区,以文件存取为例,硬盘存取的速度远低于内存中的数据存取速度。为了减少对硬盘的存取,通常从文件中一次读入一定长度的数据,而写入时也是一次写入一定长度的数据,这可以增加文件存取的效率。
java.io.BufferedInputStream与java.io.BufferedOutputStream可以为InputStream、OutputStream类的对象增加缓冲区功能。构建BufferedInputStream实例时,需要给定一个InputStream类型的实例,实现BufferedInputStream时,实际上最后是实现InputStream实例。同样地,在构建BufferedOutputStream时,也需要给定一个OutputStream实例,实现BufferedOutputStream时,实际上最后是实现OutputStream实例。
BufferedInputStream的数据成员buf是一个位数组,默认为2048字节。当读取数据来源时,例如文件,BufferedInputStream会尽量将buf填满。当使用read()方法时,实际上是先读取buf中的数据,而不是直接对数据来源作读取。当buf中的数据不足时,BufferedInputStream才会再实现给定的InputStream对象的read()方法,从指定的装置中提取数据。
import java.io.*;
class TestBufferedOutputStream { public static void main(String[] args) { try { BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("e:/a.java")); for (int i = 0; i < 200; i++) { out.write(i); } out.flush(); } catch (Exception e) { } }}
数据刷新到硬盘有两个触发条件,超过BufferedOutputStream 的缓冲区大小或者显示调用了flush。
public synchronized void write(int b) throws IOException {if (count >= buf.length) { flushBuffer();}buf[count++] = (byte)b; }
注意,直接调用调用FileOutputStream的flush是没有效果的,因为它木有实现这个方法,因此使用的是OutputStream的flush,它的flush什么也不干。
2.几个io操作的底层调用
1.网络bio,读写
socketInputStream,socketOutputStream
最终会调用
private native int socketRead0(FileDescriptor fd, byte b[], int off, int len,int timeout)private native void socketWrite0(FileDescriptor fd, byte[] b, int off, int len) throws IOException;
2.文件bio
FileInputStrem,FileOutputStream
private native int readBytes(byte b[], int off, int len) throws IOException;private native void writeBytes(byte b[], int off, int len) throws IOException;
以上都是一次linux系统调用。
- Java-IO-java的IO流
- Java 的 IO 系统
- Java的IO系统
- Java的IO系统
- java的IO复习
- Java的IO操作
- Java 的 io 包!
- 玩玩java的IO
- Java的IO系统
- java的io流
- java的io
- Java的IO系统
- java的IO系统
- Java的IO实例
- java 的IO输入
- java 的io系统
- java 的io系统
- JAVA的IO
- Android网络编程实践之旅(五):利用系统浏览器打开网页
- 使用python3.2开发pyramid1.3(安装环境和初始项目)
- Log4j
- SQL1005N 数据库别名 "SAMPLE" 已存在于本地数据库目录或系统数据库目录中
- 上海好玩的地方!
- java的io
- The Web Developer's Toolkit
- 用vs6编译openssl-1.0.0e
- 思考在专业边缘
- 关于jquery ajax return的问题
- 造成内存位置访问无效的一个原因
- 下图为 TCP/IP 协议驱动程序 (Tcpip.sys) 及其用于在 Windows XP Service Pack 2 和 Windows Server 2003 Service Pack 1
- Log4j
- Sql server 2005在安装过程中所遇到的几个问题