java流类图结构_java学习之IO流(学习之旅,一)

个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态。

Java流类图结构

5cf198bced5b9237097aacb1c96a62de.png

这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很多类并不是常用的。

缕清思路很重要的,那么我转一篇百度的文档,写的思路很清晰。

第一步,首先,明确IO流中有两个主要的体系,即字节输入流(InputStream)、输出流(OutputStream)和字符输入流(Reader)、输出流(Writer)。其次,明确数据的来源和数据将要到达的目的地。

为啥要有字节流和字符流呢?多麻烦?

自然是有原因的:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

字节流:一次读入或读出是8位二进制。      字符流:一次读入或读出是16位二进制。

第二步,明确将要操作的数据是否是纯文本数据。如果数据源是纯文本数据选Reader;数据源不是纯文本数据选择InputStream。如果数据目的地是纯文本数据就选择Writer;如果不是则选择OutputStream。

dfe02384f6590b2d76bbf6bc4ff43e17.png

第三步,明确具体的设备。即数据源是从哪个设备来的:是硬盘就加File;是键盘用System.in(是一个InputStream对象);是内存用数组;是网络用Socket流。同样目的是哪个设备:是硬盘就加File;是键盘用System.out(是一个OutoutStream对象);是内存用数组;是网络用Socket流。

c468afb185b5c70384109d0726a1cf39.png

第四步,明确是否还需要其他额外功能呢,例如①是否需要较高的效率,即是否需要使用缓冲区,是就加上Buffered;②是否需要转换,是,就使用转换流,InputStreamReader 和OutputStreamWriter。

fd8e44c77ca66b7f5fcc33c33aafaab9.png

下面给出例子,具体的用法

f3255bba323d62abd095324cf38102ec.png

a545ce0d6569d2792f1e6dce36f964c8.png

上面百度文档已经介绍的很清楚了,不过我还想更加详细的了解一下输入流和输出流。在这里只介绍比较常用的方法,因为学习需要慢慢来·····

输入字节流 InputStream

InputStream      是所有的输入字节流的父类,它是一个抽象类。(做什么用的呢?是个抽象类,不是接口,后期再研究)

下面我要考虑了,其实文件的输出输入是比较容易混的。那么我们怎么区分呢?

这样,不管是输入还是输出,都是真对内存来说的,什么意思呢?

解释一下:如果我们要上传一个文件,有三个步骤。第一,读取本地文件,就是先把硬盘上面的文件读取到内存中,那么真对内存来说就是用输入流(inputStream);第二,再把内存中的文件输出(outStream),真对内存来说就是从内存输出到服务器的硬盘上。

ByteArrayInputStream 、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。

其他两种没用过, 只就是  FileInputStream ,文件的上传和下载用的都是这种流。

输出字节流 OutputStream

OutputStream  是所有的输出字节流的父类,它是一个抽象类。(和上面对应的==不懂,后期研究==)

这次写文件下载用的就是这个父类。下面给出代码

//创建输出流

OutputStream out =response.getOutputStream();//创建数组

byte buffer[] = new byte[1024];int len = 0;//循环将输入流中的内容读取到缓冲区当中

while((len=in.read(buffer))>0){//输出缓冲区的内容到浏览器,实现文件下载

out.write(buffer, 0, len);

}

用FileOutputStream 应该也是可以的吧,不过这就要指定具体的那个路径进行文件写出,也就是往硬盘写入。

在此,我有个疑问,byte buffer[] 是否是缓冲区?

答案;不是缓冲流,不确定缓冲区做什么用的,后期再研究。

缓冲流:有四个,当然是字节缓冲输入流BufferedInputStrean、字节缓冲输出流OutputStreamWriter、 和字符的 BufferedReader、 BufferedWriter 增加缓冲功能,避免频繁读写硬盘。

缓冲流大小通常是根据文件大小来进行匹配的,如果不进行设置有个默认值

今天就到这吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 安装xdebug扩展

php 扩展获取地址 http://pecl.php.net/package/ 编译安装的过程 wget http://pecl.php.net/get/xdebug-2.2.2.tgz tar -zxvf xdebug-2.2.2.tgz cd xdebug-2.2.2/ /data/klj/php/bin/phpize ./configure --enable-xdebug --with-php-config/data/klj/php/bin/php-config mak…

通过VB向SQL Server数据库中录入数据

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)一、数据录入通过VB向SQL Server数据库中录入数据,可以使用数据绑定控件录入数据与使用SQL语句录入1.利用数据绑定控件录入数据使用数据绑定控件录入数据可以运行较少的代码&…

拨打电话 java_简单拨打电话程序

众所周知,对于一个手机,能拨打电话是其最重要也是最常用的一个功能.而在Android里是怎么样实现拨打电话的程序呢?我在这里写了一个简单的拨打电话的Demo,供大家参考.一共分为5个步骤.Step 1:新建一个Android工程,命名为phoneCallDemo.Step 2:设计程序的界面,打开main.xml把内容…

Apple开发者账号申请学习方式

http://jingyan.baidu.com/article/414eccf610e7c76b431f0a94.html https://developer.apple.com/wwdc/schedule/转载于:https://www.cnblogs.com/wcLT/p/4167707.html

SQLite/嵌入式数据库

SQLite/嵌入式数据库 的项目要么不使用数据库(一两个文配置文件就可以搞定),要么就会有很多的数据,用到 postgresql,操练sqlite的还没有。现在我有个自己的小测试例子,写个数据库对比的小项目例子&#xff…

python继承属性_Python中的属性继承问题

不久前,我在开发一个python应用程序,我在类中使用了很多属性,但是当我试图重写派生类中基类的访问器的行为时,我遇到了麻烦。这是我的问题的草图:class Person(object):propertydef name(self):return self._namename.…

王爽汇编语言实验十

实验十 3.数值显示(以下程序附带测试程序) 1 ;名称: dtoc2 ;功能: 将dword型数据转变为表示十进制数的字符串,字符串以0为结尾3 ;参数: (ax)dword型数据低字4 ; (dx)dword型数据高字5 ; ds:si指向字符串的首地址6 ;返回: 无7 assume cs:code8 data segment9…

WPF01(xaml)

XAML&#xff1a;&#xff08;转自http://www.cnblogs.com/huangxincheng/archive/2012/06/17/2552511.html&#xff09; <Window x:Class"WpfApplication1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"…

android源码包下载

http://rgruet.free.fr/public/其他下载地址&#xff1a;http://cid-b50f9d5897331c44.office.live.com/browse.aspx/Android技术群共享/source code 转载于:https://www.cnblogs.com/liangxiaofeng/p/4173340.html

java 线程 状态 图_Java提高——多线程(一)状态图

操作系统中的进程和线程的概念进程是指一个内存运行的应用程序&#xff0c;每个进程都有自己独立的一块内存空间&#xff0c;一个进程中可以启动多个线程&#xff0c;比如windows下的一个运行的应用程序.exe就是一个进程。线程是指进程中的一个执行流&#xff0c;一个进程可以运…

UITableView 重用cell方法edequeueReusableCellWithIdentifier,出现错误

UITableView 使用重用cell方法edequeueReusableCellWithIdentifier&#xff0c;出现错误&#xff1a;*** Terminating app due to uncaught exception NSInternalInconsistencyException, reason: unable to dequeue a cell with identifier cell3 - must register a nib or a …

学习ecshop 教程网址

http://www.chinab4c.com&#xff08;中国B4C电子商务&#xff09;转载于:https://www.cnblogs.com/ymj0906/p/4175681.html

幽幽的灵光射不出你想要的疯狂

秋天到了&#xff0c;忧伤便无处可逃&#xff0c;秋天的忧伤的气息&#xff0c;就像一个妖艳的美女躺在你的身边&#xff0c;让你热血沸腾&#xff0c;冲动无比&#xff0c;而又悲喜交加&#xff0c;忧愁满地。如果不信&#xff0c;你可以试试。分享一首去年的诗歌&#xff0c;…

java 复杂 sql_复杂的SQL条件

概述什么是 Nutz.Dao 中的复杂SQL条件对于 Nutz.Dao 来说&#xff0c;它本质上就是将你的 Java 对象转化成 SQL&#xff0c;然后交给 JDBC 去执行。而 SQL 中&#xff0c;当执行数据删除和查询操作时&#xff0c;最常用的就是 WHERE 关键字。WHERE 关键字后面的就是所谓的复杂查…

找规律

找规律填写NN方阵。如N8时, 其方阵为: 1 1 1 1 1 1 1 11 2 2 2 2 2 2 11 2 3 3 3 3 2 11 2 3 4 4 3 2 11 2 3 4 4 3 2 11 2 3 3 3 3 2 11 2 2 2 2 2 2 11 1 1 1 1 1 1 1 上代码&#xff1a; 1 #include <stdio.h&g…

arm qt5 iconv 问题

2019独角兽企业重金招聘Python工程师标准>>> 问题 3&#xff1a;./system/rootlib/helloworld -qws &#xff0c;程序运行起来&#xff0c;仍报错 QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed …

android java 调试快捷键_Android Studio 代码页跳界面 /java和XML快速切换技巧

从csdn博客搬家过来&#xff0c;请多关照&#xff01;之前一直在csdn博客,也写了不少关于java的文章,主要是学习java上的一些问题.想通过这种方式来加深对问题的认知,同时也可以帮助到志同道合的人,一起在编程的道路上共进,共勉.fancybox的配置项Fancybox的API和配置选项说明 属…

设计模式之Builder (创建者模式)的一些个人理解(转)

对于Builder模式很简单&#xff0c;但是一直想不明白为什么要这么设计&#xff0c;为什么要向builder要Product而不是向知道建造过程的Director要。刚才google到一篇文章&#xff0c;总算清楚了。在这里转贴一下这位richardluo的比喻。简单地说&#xff0c;就好象我要一座房子住…

python-多继承

python中的多继承python和C一样&#xff0c;支持多继承。概念虽然容易&#xff0c;但是困难的工作是如果子类调用一个自身没有定义的属性&#xff0c;它是按照何种顺序去到父类寻找呢&#xff0c;尤其是众多父类中有多个都包含该同名属性。class P1 #(object): def foo(self…

java父子表_Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级...

在平时的开发工作中&#xff0c;经常遇到这样一个场景&#xff0c;在数据库中存储了具有父子关系的数据&#xff0c;需要将这些数据以树形结构的形式在界面上进行展示。本文的目的是提供了一个通用的编程模型&#xff0c;解决将具有父子关系的数据转换成树形结构的问题。如有不…