IO里的那些流
今天做一个”流”的总结,那些”流”呢,当然是IO里的那些流.
既然做流,我们就先明确一个概念,即什么是流?
流的概念
在Java中,把一组有序的数据序列称为流.
流的分类:
流按方向分为两种:输入流和输出流.程序向输入流读取数据,向输出流写入数据
输入流:可以从中读取一系列字节的对象称为输入流.
输出流:可以从中写入一系列字节的对象称为输出流.
按照数据流最小数据单元类型分:
1) 数据流最小数据单元为字节,那么这种流叫字节流.
2) 数据流最小数据单元为字符,那么这种流叫字符流.
3) 数据源包括:字节数组,String对象,文件,管道等.(这些名字后面加个流字就可以归为这一类)
流还可以分为:节点流类和过滤流类
这里主要分享一下缓冲流(BufferedInputStream,BufferedOutputStream),他将字节流变成缓冲字节流,这样做最大的优点在于大大提高了性能。当从字节输入流用read()操作,它会一次性读取多个字节来填充内部缓冲,这样就大大减少了程序执行时间。(where还试验了一下,同样一个10MB的文件用缓冲读只需3ms而用数组及时把数组大小设置成10000仍需350多ms,而且用数组复制的话很难百分之百复制,总会多出一些字节,者难以避免,所以在此推荐用缓冲流)
PS:默认缓冲区大小事8192字节,可以将缓冲区设定为内存页或磁盘块的整数倍来提高性能。
PPS:在关闭缓冲流时会自动关闭所串接的底层字节流
流的应用
看了这么多流的分类,我们会有个疑问,“这么多流”我们在那种情况下用何钟流?下面就我现在所知,做一个总结。
1) 如果我们要从数据流中读取(写入)指定数据类型的数据,如int,float型的数值,只要用DateInputStream/DateOutputStream
2) 如果我们要将一个对象从数据流中读取(写入)文件,只要用ObjectInputStream/ObjectOutputStream.
3) FileInputStream/FileOutputStream,用于从文件读取(写入)数据,主要用于二进制文件的读/写(如读取图像之类的原始字节流)
4) 在分类时我们提到了数据源,当你要写如数组时,按照上面三规律,我们肯定要用ByteArrayOutputStream.写到这我想用法我们基本清楚了。下面我把每一个数据源
FileIputStream
|
ByteArrayIputStream
|
FilterIputStream
|
ObjectIputStream
|
PipedIputStream
|
SequenceIputStream
|
5) 相应的子类做一个列举:
DateIputStream
|
BufferdIputStream
|
LineNumberIputStream
|
PushbackIputStream
|
6)关于每个类的构造方法JDK文档都有不再赘述
流的一些注意事项
1)每次用完流要记着close(),因为如果不关闭它会一直存在与内存。
2)常用的关闭流的顺序是先关输入流,然后强制输出,最后关闭输出流
3)在关闭缓冲流时会自动关闭所串接的底层字节流
4)用什么方法read就用同样的方法write(每个流都有很多read和write方法)用的时候要注意。
“流”的事咱先说到这儿,当前也就想到这么多,本来想贴画图板的保存和打开作为流的应用举例,耐于篇幅巨大,只能按文件上传上去,有需要的自行下载。(大家可能说where你这老拿画图板说事,没有一个功能相对完善,界面相对漂亮的画图板,面对这种声音where只能说电脑坏了以后原来做的相对完整的画图板不能用了,于是每次用的画图板都比较粗糙,只实现了相应知识点的功能,当然这样也有好处,对于像where一样的初学者想单看某个功能的实现,这样也方便些,仅作学习之用,特此解释,不过只要时间允许where还是会做一个相对完整的画图板)
分享到:
相关推荐
全书对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。 本资源共分4部分,分别为: JAVA.2核心技术.卷I:基础知识(原书第7版).part1.rar ...
Java核心技术 卷Ⅰ:基础知识 【中文】 第1章概述Java与其他程序设计语言不同的性能。解释这种语言的设计初衷,以及在哪些方 面达到了预期的效果。然后,简要叙述Java诞生和发展的历史。 第2章详细地论述如何下载和...
《Java核心技术卷1:基础知识(第8版)(英文版)》示例程序经过精心设计,不但具有实用价值,而且易于阅读理解,可以作为初学者自己编写程序的良好开端,也能够帮助程序员快速地了解Java SE 6的新特性,或迅速从其他语言...
java的基础知识,全面,易理解,适合自学。 自己学习总结出来的,希望对大家有帮助
Java有兴趣的零基础人员可以通过学习本文档,来加强对Java知识的理解和掌握。
《Java基础知识面试必备》是一...无论你是Java初学者还是有一定经验的开发者,这份《Java基础知识面试必备》都将是你面试准备过程中的得力助手。它能够帮助你巩固基础知识,提升面试信心,为你的职业发展提供有力支持。
■Java语言基础知识 ■面向对象程序设计 ■接口与内部类 ■事件监听Qi模型 ■Swing图形用户界面程序设计 ■打包应用程序 ■异常处理 ■登录与调试 ■泛型程序设计 ■集合框架 ■多线程
全书对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。 本资源共分4部分,分别为: JAVA.2核心技术.卷I:基础知识(原书第7版).part1.rar ...
本书不仅让你深入了解设计和实现 Java 应用涉及的所有基础知识和 Java 特性,还会帮助你掌握开发 Java 程序所需的全部基本技能。相信在学习Java的道路上有了本书的辅助,你的学习一定可以做到事半功倍。 作者简介 ·...
在面试过程中,面试官通常会通过询问求职者对于Java基础知识的理解来评估其技能水平。例如,对于面向对象编程的概念、异常处理机制、集合框架的使用等方面的知识,如果求职者能够清晰地解释并给出相应的示例代码,就...
基础知识 面向对象基础 Java基本数据类型 string和包装类 final关键字特性 Java类和包 抽象类和接口 代码块和代码执行顺序 Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射...
java的基础入门知识网上有很多,很多大神的博客里也有总结,笔者不...所以在这篇基础文档里里,很多基础知识笔者会收集资料,做一个汇总。当然,同时也会加入笔者自己的理解,说一些笔者学习时踩过的坑,分享一些心得
该文档包含了一系列Java基础知识笔试题,涵盖了面向对象编程、数据类型、控制流、异常处理、多线程等方面的内容。每个问题都设计为测试候选人对Java语言的基本理解和应用能力。 **适用人群:** - Java初学者和初级...
理解与掌握Java语言的基础知识,能熟练地使用Java语言编写程序 注重理论与实践相结合,理论知识要扎实,注重上机编写、调试程序 培养良好的编码习惯、综合算法设计与编程能力 学会查看帮助文档,通过文档进行学习
《Java基础教程(第3版)》以通俗易懂的语言,循序渐进地向读者介绍了Java语言编程的基础知识。针对较难理解的问题,所列举的例子都是由简到繁,便于读者掌握Java编程技巧。在第3版中加大了面向对象的知识容量,补充...
今天我们进入《Java常用基础知识》专题,动力节点Java资源库整合了近年各大厂的面试中的常见问题和知识点。每天更新10个,我们的最终目标就是大厂,若对题目有疑问,可在公众号后台留言提问。 目标:阿里巴巴、腾讯...
Java基础思维导图涵盖大部分Java基础重点内容。适用于新手小白理解Java学习之路。
JAVA核心技术基础知识配套源码,对应各个实例,可运行。各个实例精简形象,能很好地帮助理解知识,帮助从零开始构建JAVA知识体系,是很有用的一套示例程序。
尚硅谷java教程全程跟听,手动整理,从面向对象开始按章节按课时整理,适合对照视频作为笔试使用/java知识脉络梳理/八股理解背诵