`
univasity
  • 浏览: 800740 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

对Java的I/O流理解

    博客分类:
  • J2me
阅读更多

这是很久前另一个BLOG上的,现在不用了。转过来吧,方便查看...

 

输出流

流程示意图:

 

不同的情况:

1.        调用 write( ) 方法,把数据写入缓冲区,

i 如果缓冲区被填满 ,将自动执行 2,3 步,把数据转换为字节写入到下一个缓冲区

(1)   如果此缓冲区又被填满,则自动执行第 4 步,把转换好的数据保存到缓冲数组

(2)   如果未被填满则不会执行第 4 步。

< 将循环执行,未写入的数据源 继续写入缓冲区,直到数据被全部写入 >

    ii 如果未被填满 ,则不执行 2 3 步。

2.        当出现未被填满而不发送的情况,可以调用 flush( ) 方法进行强制刷出操作。

 

API 中的一些定义:

ByteArrayOutputStream

1.   此类实现了一个输出流,其中的数据被写入一个 byte 数组。

2.   缓冲区会随着数据的不断写入而自动增长。

3.   可使用 toByteArray() toString() 获取数据。

 

OutputStreamWriter

1.        OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。

2.        每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。

3.        传递给 write() 方法的字符没有缓冲。

 

BufferedWriter

1.        将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

2.        可以指定缓冲区的大小,或者接受默认的大小。

 

还有就是 flush( ) 方法的定义——

1.        刷新该流的缓冲。

2.        如果该流已保存缓冲区中各种 write() 方法的所有字符,则立即将它们写入预期目标。

3.        然后,如果该目标是另一个字符或字节流,则将其刷新。

4.        因此,一次 flush() 调用将刷新 Writer OutputStream 链中的所有缓冲区。

 

* 需要注意的是, ByteArrayOutputStream 中的数组缓冲区初始大小为 32 字节,随后会按数据大小自动进行调整。

 

 

输入流

流程示意图:

 

1.        把数据源转换为字节数组;

2.        把转换好的字节缓冲数组作为参数源传进 ByteArrayInputStream 流;

3.        与输出流不同的是,第 3 4 5 步会自动执行,把数组传进下一个缓冲区;

4.        等到调用 read( ) 方法,把缓冲中数据读出

 

API 中的一些定义:

ByteArrayInputStream

1.ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。

2. 内部计数器跟 read 方法要提供的下一个字节。

 

InputStreamReader

1.        InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。

2.       每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。

3.       要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

BufferedReader

1.        从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

2.        可以指定缓冲区的大小,或者可使用默认的大小。

 

close( ) 方法——

1.        关闭该流并释放与之关联的所有资源。

2.        在关闭该流后,再调用 read() ready() mark() reset() skip() 将抛出 IOException

3.        关闭以前关闭的流无效。

分享到:
评论

相关推荐

    Java I/O学习笔记: 磁盘操作 字节操作 字符操作 对象操作 网络操作 NIO & AIO Java I/O

    Java I/O学习笔记: 磁盘操作 字节操作 字符操作 对象操作 网络操作 NIO & AIO Java I/O Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行...

    Java I/O深入学习之File和RandomAccessFile

    主要介绍了Java I/O深入学习之File和RandomAccessFile, I/O系统即输入/输出系统,对于一门程序语言来说,创建一个好...在充分理解Java I/O系统以便正确地运用之前,我们需要学习相当数量的类。,需要的朋友可以参考下

    《Java基础入门(第3版)》(Java):课后答案-docx文档

    1.内容概要: 包括《Java基础入门(第3版)》的课后习题答案 2.适用人群: Java初学者 ...(4)学习常用的Java库和框架:了解Java的常用库和框架,如集合、I/O流、多线程等,可以帮助你更好地编写代码。

    mangooio:直观,轻便,高性能的全栈Java Web框架

    mangoo I / O ... mangoo I / O致力于使开发人员友好,流利且易于理解的Web框架,并具有针对Java生态系统的少量学习曲线。 主要特点 概括地说,这是mangoo I / O的一些关键功能: 直观的配置约定 使用

    s2 JavaOOP上机作业全部代码

    s2 JavaOOP上机作业全部代码,仅供交流使用

    Java NIO:浅析I/O模型

    在进入Java NIO编程之前,我们先来讨论一些比较基础的知识:I/O模型。下面本文先从同步和异步的概念 说起,然后接着阐述了阻塞和非阻塞的区别,接着介绍了阻塞IO和非阻塞IO的区别,然后介绍了同步IO和异步IO的区别,...

    资源描述自己打的java简单记事本

    我使用了Java Swing库来创建用户界面,并使用Java I/O库来处理文件操作。我还使用了一些其他的Java类和方法,例如JFileChooser、JTextPane、JMenuBar等等。 我希望这个简单的记事本可以帮助其他学习Java编程的人,...

    java之路,主要是java中的学习过程与基础项目.rar

    这部分主要学习的内容有:基本程序结构,类与对象,接口,泛型,反射,集合,异常与调试, Java 网络编程, Java I/O和多线程。 学 Java 基础,推荐大家看尚硅谷宋红康老师的 Java 教程,宋老师的课程更适合零基础...

    nio入门 IBM教材,pdf格式

    NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的、面向块的 I/O。通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO 不用使用本机代码就可以利用低级优化,这是原来的 I/O 包所无法做到的...

    java swing开发心理健康测评系统的设计与实现.zip

    通过设计与实现一个桌面系统,使学生深入理解并实践在《程序设计技术》课程中所学的面向对象的思想和方法、图形界面、数据库、I/O流与文件、多线程、网络编程等知识,强化学生利用面向对象的方法对系统进行需求分析...

    java swing开发心理健康测评系统的设计与实现

    通过设计与实现一个桌面系统,使学生深入理解并实践在《程序设计技术》课程中所学的面向对象的思想和方法、图形界面、数据库、I/O流与文件、多线程、网络编程等知识,强化学生利用面向对象的方法对系统进行需求分析...

    Java入门1·2·3——一个老鸟的Java学习心得 高清pdf

    第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、...

    JAVA学习手册CHM版

    第2篇为核心篇,包括字符串处理、集合类、使用异常处理机制、掌握Java的I/O技术、精通多线程技术、枚举与泛型;第3篇为高级篇,包括Swing基础知识、JDBC技术、Swing高级组件、GUI事件处理机制、网络程序设计;第4篇...

    Java入门1·2·3:一个老鸟的Java学习心得.rar 超清

    第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、...

    Familia-Java:用于在java理解和调试baidu Familia

    d src/test/jni -force -jni familia.java.util.CMinstdRand0编译 gcc -fPIC -D_REENTRANT -I${JAVA_HOME}/include -I//develop/jdk1.6.0_31/include/linux -shared -o hellojni.so HelloJni.c cl -I "%JAVA_HOME%/...

    涵盖了 Java 基础、集合、源码、并发、虚拟机、框架、数据库、网络编程、设计模式、新特性和数据结构等多个知识领域的面试突击

    Java核心技术:I/O、多线程、网络编程、反射、泛型等 Java虚拟机:内存模型、垃圾收集器、类加载机制等 Java企业级开发:Spring、Hibernate、MyBatis等框架原理 数据库和缓存:SQL优化、索引、Redis、Memcached等 分布式...

    libraryManageSystem.rar

    本资源主要是通过IO对象操作流进行数据的存取。主要功能包括管理员对图书、读者的增删查操作、读者的借阅、读者的还书操作。实现方式:控制台输入输出。 主要是对刚入门的萌新们比较友好~代码... 熟悉掌握I/o流相关操作

    jsr80 java 访问 usb

    这两个项目也都开始试图向其他操作系统上的 Java 应用程序提供对 USB 设备的访问,尽管它们都还没有开发出可以使用的包(参阅 参考资料 中有关本文中讨论的这两个项目及其他项目的资料)。 在本文中,将对 jUSB 和 JSR...

    java笔试题2015-sparrow:一个高效的web/http服务器...(多线程&&非阻塞I/O&&epoll)

    java笔试题2015 #Sparrow sparrow 是一个简单高效的http server,纯C语言开发(基于Linux),目前主要用在本人个人的网站. #Online demo #150行的一个demo httpd,帮你理解整个结构 如果需要理解代码的结构,建议去...

    图书管理系统源代码(java实现).docx

    利用文件存储数据,帮助理解I/O流的概念;目前全网简单系统基本都是利用数据库实现存储数据,而对于一些没学数据库又想做个简单系统练手的,该系统基本能符合要求。

Global site tag (gtag.js) - Google Analytics