Java--流重点总结初稿

2015年12月8日 20:36:22

Java高级部分流重点总结

作者:数据分析玩家

QQ:991469838@qq.com

Java中引入流的重要意义:

Java中流的引用,打破了传统意义上输入设备就是键盘,输出设备就是显示器的这种局限性,用户可以自行设计输入设备与输出设备,从而进行数据的传输

流的定义:

在Java当中,若一个类专门用于数据传输,则这个类称为流

流就是程序和设备之间嫁接起来的一根用于数据传输的管道,这个设备可以是本地硬盘、可以是内存条,也可以是网络所关联的另外一台计算机等等,其中不同管道上有不同的按钮,按下不同的按钮相当于调用不同的方法,这根带按钮的用于用于数据传输的管道就是流,即流就是一根管道

流与类的关系:

流一定是类,但类不一定是流

流的分类:

1>按照数据流的方向不同可以分为输入流与输出流,其中输入与输出是相对于程序的角度而言的,所谓输入就是从某个设备当中读取数据,例如键盘,所谓输出就是向某个设备当中输出数据,例如显示器,Java当中的输出流类似于c语言当中的printf(),Java当中的输入流类似于操作系统中的scanf().

2>按照处理数据单位的不同分为字节流(8位)和字符流(16位),其中一个字符占2个字节

3>按照功能的不同分为原始流和包裹流

原始流:可以从一个特定的设备即数据源中读写数据的流,就像是一条单一的管道接到水龙头上开始放水。

包裹流:所谓包裹流就是由于原始流的功能太简单了,对原始流进行一定的加工处理---在原始流的基础上套一个功能比较强大的管子,这个管子称为包裹流,包裹流类似于在一条已经存在的管子上套上另外一条管子

包裹流与原始流的关系:

1、为什么有原始流,还要定义包裹流?

因为原始流的功能太简单了、太弱了,需要套上包裹流,提供更为强大的功能

原始流与包裹流的关键区别在于能不能直接连接到设备

2、为什么要使用包裹流,必须要先定义原始流?

因为包裹流中那些很常用的,功能很强大的按钮,它们的内部也是以原始流的方式来实现的。

包裹流无非是把原始流进行了一些加工处理,在外部提供了一些功能更加强大的,更加人性化的一些方法【按钮】

抽象类的定义:

抽象类是为了更好的对类加以分类,抽象类通常情况下是作为一个类族的最顶层的父类,如植物,并用最底层的类来描述现实世界中的具体事物,抽象类不能定义出抽象类的实例对象,因为植物等只是一个具体的概念,但是却可以定义出抽象类的引用

四大基本抽象流的概念:

1>所谓四大基本抽象流就是四大基本抽象类

  InputStream是所有字节输入流的父类

  OutputStream是所有字符输入流的父类

  Reader是所有字符输入流的父类

  Writer是所有字符输出流的父类

2>四大基本抽象流包括字节流和字符流

  字节流包括InputStream和OutputStream,凡是以stream

  结尾的都是字节流

  字符流包括Reader和Writer

3>字节流处理数据的单位是一个字节,字符流处理数据的单 

  是一个字符,在Java当中一个字符占2个字节

 【注:字符流与字节流的方法一模一样,仅仅是处理的单 

   位不一样】

简述输入流与输出流的概念:

所谓输出流就是通过输出管道将数据输出到指定的设备当中

FileOutputStream fw = new FileOutputStream(输出设备);

即通过输出管道fw将数据输出到指定的输出设备当中

所谓输入流就是通过输入管道从指定的设备当中提取数据

FileInputStream fr = new FileInputStream(输入设备);

即通过输入管道fr从指定的输入设备当中提取数据

简述抽象类与抽象方法的关系

含有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法

简述原始流与包裹流的具体分类:

在Java的io包中:

                常用的具体流如下:

     原始流

包裹流

文件流

输出流

缓冲流

转换流

数据流

FileInputStream

 

PrintStream

BufferedInputStream

InputStreamReader

DataInputStream

FileOutputStream

BufferedOutputStream

FileReader

BufferedReader

OutputStreamWriter

DataOutputStream

FileWriter

BufferedWriter

 

简述四大基本抽象流中InputStream流常用的3个方法:

1、public int read():从输入流中读取一个字节并将字节所对应的整数进行返回,如果读取到输入流的末尾则返回-1

2、public int read(byte[] b):从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中,并以整数形式返回实际读取的字节数

如果读取到输入流的末尾则返回-1

如:len = fis.read(buf)

//从fis流所关联的设备中读取数据,并将读取出来的数据写入buf数组中,返回值是实际写入buf数组的字节的个数,如果读取到文件的末尾则返回值为-1

3、public int read(byte[] b,int off,int len):从输入流中最多读取len个字节的数据,并将其存储在缓冲区数组b中,其中off表示第一个读出的数据要存入的位置,最后以整数形式返回实际读取的字节数

如果读取到输入【文件】的末尾则返回-1

简述四大基本抽象流中Reader流常用的3个方法:

即InputStream流与Reader流的方法一模一样,仅仅是处理的单位不同而已

简述四大基本抽象流中OutputStream流中常用的3个方法:

1.public void write(int b):向输出流中写入一个字节数据,该字节数据为参数b的低8位

2.public void write(byte[] b):将一个字节类型的数组中的数据写入到输出流

3.public void write(byte[] b,int off,int len):将一个字节类型的数组从指定位置【off】开始的len个字节的数据写入到此输出流

简述四大基本抽象流中Writer流中常用的3个方法: 

即OutputStream流与Writer流的方法一模一样,仅仅是处理单位的不同而已

如何理解缓冲区:

1>一般的缓冲区指的都是内存,缓冲区可以起到对硬盘的保护作用,并提高程序的运行速度,缓冲区本质上是计算机的一种优化机制

2>带缓冲区的流,读入的数据先存到缓冲区,在存到指定的设备中

带缓冲区的流,输出的设备先输出到缓冲区,在输出到指定的设备中

3>默认的缓冲区属于系统的优化,在外界是看不到的,编程之后要记住刷新缓冲区,因为数据默认的是先写到缓冲去里面,如果不刷新缓冲区,输出设备当中可能是空的 

【注:编程结束后,要关闭流并释放与该流相关的所有系统资源】

Java中具体流的介绍:

文件流:原始流

Java中的文件流包括:FileInputStream FileOutputStream

                    FileReader      FileWriter

文件流的作用:Java中的文件流可以将一个文件的内容按字节/字符为单位来进行读取、复制

【字节流与字符流的区别:

 1>字节流可以处理所有格式的文件,但是带有汉字的文             

 本通过字节流输出到显示器上时会出现乱码的现象】

 2>字符流只能处理文本格式的文件,不能处理非文本格式

 的文件,因为非文本文件本身就不是一个一个字符,所以

 要当一个字符一个字符来解读,肯定会出错】

【在Java当中,一个字符占2个字节,虽然英文单词也占2个字节,但是默认的高字节为空,所以一个字节一个字节的解读无所谓】

FileInputStream、FileReader流中常用的构造方法:

FileInputStream(String filename):

FileReader(String filename):

作用:利用该构造函数可以实现将输入流连接到某个文件的功能,从某个文件当中提取数据

FileOutputStream、FileWriter流中常用的构造方法:

作用:利用该构造函数可以实现将输出流连接到某个文件的功能,向某个文件当中输出数据

缓冲流:包裹流

Java中的缓冲流包括:

BufferedInputStream   BufferedOutputStream

BufferedReader        BufferedWriter

缓冲流的概念:

缓冲流就是带有缓冲区的输入输出流

缓冲流的作用:

1>带缓冲区的流比不带缓冲区的流运行速度要快,因为此时此刻不是读一个写一个,而是读完之后先放在缓冲区里面,然后再一次性写入硬盘

2>带缓冲区的输入流,允许一次向程序中读入多个字节的数据;带缓冲区的输出流,允许一次向硬盘中写入多个字节的数据;对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法将会使内存中的数据立刻写出

如何理解int  len = bis.read(buf,0,1024):

从bis流所关联的设备中读取数据,并将读取出来的数据先写入bis自己的默认缓冲区中,然后再将缓冲区的内容写入buf数组中,每次最多向buf数组中写入1024个字节,返回实际写入buf数组的字节的个数,如果读取到文件的末尾则返回值为-1 

BufferedInputStream、BufferedReader缓冲流常用的方法:

public int read(byte[] b):将当前流关联的设备中所读取出来的数据存入一个字节数组中,并返回实际写入b数组的字节的个数【byte可以换成char】

BufferedReader缓冲流常用的一个方法: 

读取文本的一个首选方法是使用BufferedReader中的readLine()方法,注意BufferedInputStream中没有这个方法 

BufferedInputStream、BufferedReader缓冲流常用的方法:

public void write(byte[] b):将b数组中的数据写到【输出到】当前流所关联的设备当中

BufferedWriter缓冲流常用的一个方法:

综上:如果我们希望用BufferedInputStream和BufferedOutputStream来完成“将一个设备中的数据导入另一个设备中”,我们就应该定义一个临时的byte类型的数组,用这个临时数组作为输入流与输出流进行交互的中转枢纽

数据流:包裹流

Java中的数据流的包括:

DataInputStream、DataOutputSteam

DataInputStream常用的方法: 

DataOutputStream常用的方法:

DataOutputStream中的write###(data)方法是把data在内存中的二进制数据写入输出设备当中

Java中数据流的本质:

i = fr.readInt()类似于scanf(“%d”,&i);

fw.writeInt(i)类似于printf(“%d”,i);

Java中的数据输入流本质上为c语言中scanf()函数功能的具体话

Java中的数据输出流本质上为c语言中printf()函数功能的具体话

数据流的作用:

Java中的数据流能够以一种与机器无关的方式,直接从底层字节输入流读取基本类型数据或者直接将基本类型数据写到字节输出流当中,即数据流可以被基本类型数据的二进制直接读入或写出

转换流:包裹流

Java中转换流的分类:

OutputStreamWriter与InputStreamReader

Java中转换流的作用:

OutputStreamWriter的作用是将输出字节流转换成字符流

InputStreamReader的作用是输入字节流转换成字符流

输出流:原始流

Java中输出流的分类:

PrintStream

输出流的作用:

PrintStream在OutputStream基础之上提供了增强的功能,可以把基本类型数据格式化后的字符串进行输出,类似于c语言中的printf函数,而不是仅限于输出字节类型

学完Java中的流应掌握的几个重要程序:

1、读取一个文件的内容并将其输出到显示器上,并统计读取出来的字节的个数

2、编程实现文件的复制

3、利用缓冲流完成文件的复制

4、编程实现将整型数据写入字节数组中,然后再从字节数组中把该数据读出来【网络编程重要】

5、如何将键盘输入的字符组成字符串直接赋给String对象

6、编程实现将键盘输入的数据输入到A文件中,如果输入有误,则把出错的信息输出到B文件中

2015年12月9日16:25:24 完稿

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只懒得睁眼的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值