黑马程序员_IO流


----------- android培训、java培训期待与您交流! -----------

 

1.  IO(Input Output)

    IO流用来处理设备之间的数据传输

    Java对数据的操作是通过流的方式

    Java用于操作流的对象都在IO包中

    流按操作数据分为两种:字节流与字符流。

    流按流向分为:输入流,输出流。

 

IO流常用基类

字节流的抽象基类:

  InputStream OutputStream

字符流的抽象基类:

  Reader Writer

注:由这四个类派生出来的子类名称都是 以其父类名作为子类名的后缀。

  •如:InputStream的子类FileInputStream

  •如:Reader的子类FileReader

 

IO程序的书写

 导入IO包中的类

 进行IO异常处理

 在finally中对流进行关闭

 

2.  字符流——创建文件

创建流对象,建立数据存放文件

  FileWriter fw = new FileWriter(Test.txt);

调用流对象的写入方法,将数据写入流

  fw.write(text);

关闭流资源,并将流中的数据清空到文件中。

  fw.close();

 

字符流——读取文件

建立一个流对象,将已存在的一个文件加载进 流。

  FileReader fr = new FileReader(Test.txt);

创建一个临时存放数据的数组。

  char[] ch = new char[1024];

调用流对象的读取方法将流中的数据读入到数组 中。

  fr.read(ch);

 

注意:

 定义文件路径时,可以用“/”或者“\\”。

 在创建一个文件时,如果目录下有同名文 件将被覆盖。

 在读取文件时,必须保证该文件已存在, 否则出异常。

 

字符流的缓冲区

缓冲区的出现提高了对数据的读写效率。


3.  
对应类

  BufferedWriter

  BufferedReader

缓冲区要结合流才可以使用。

在流的基础上对流的功能进行了增强。

 

装饰设计模式

  对原有类进行了功能的改变,增强。

  装饰模式的基本格式。

  它与继承有什么不同?

  了解BufferedReader的原理。

 

4.  字节流

 基本操作与字符流类相同

 但它不仅可以操作字符,还可以操作其他媒体文件

 

字节流的缓冲区

 同样是提高了字节流的读写效率。

 模拟一个BufferedInputStream

 

转换流

InputStreamReader,OutputStreamWriter

转换流的由来

  •字符流与字节流之间的桥梁

  •方便了字符流与字节流之间的操作

转换流的应用

  •字节流中的数据都是字符时,转成字符流操作更高效。

 

标准输入输出流

 System类中的字段:inout

 它们各代表了系统标准的输入和输出设备。

 默认输入设备是键盘,输出设备是显示器。

 System.in的类型是InputStream.

 System.out的类型是PrintStreamOutputStream的子类FilterOutputStream 的子类.

 

标准输入输出流示例

:获取键盘录入数据,然后将数据流向显示器,那么显示器就是目的地。

通过System类的setInsetOut方法对默认设备进行改变。

  System.setIn(new FileInputStream(1.txt));//将源改成文件1.txt

  System.setOut(new FileOutputStream(2.txt));//将目的改成文件2.txt

因为是字节流处理的是文本数据,可以转换成字符流,操作更方便。

BfferedReader bufr =

new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bufw =

new BufferedWriter(new OutputStreamWriter(System.out));

 

流的基本应用小节

  流是用来处理数据的。

  处理数据时,一定要先明确数据源,与数据目的 地(数据汇)。

 数据源可以是文件,可以是键盘。

 数据目的地可以是文件、显示器或者其他设备。

  而流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理.转换处理等。

 

5.  File

 用来将文件或者文件夹封装成对象

 方便对文件与文件夹的属性信息进行操作 。

 File对象可以作为参数传递给流的构造函数。

 了解File类中的常用方法。

 

6.  递归

函数自己调用自己。

注意:递归时一定要明确结束条件。

应用场景:当某一功能要重复使用时。

 

7.  IO包中的其他类

RandomAccessFile

  •随机访问文件,自身具备读写的方法。

  •通过skipBytes(int x),seek(int x)来达到随机访问。

管道流

  PipedInputStreamPipedOutputStream

  •输入输出可以直接进行连接,通过结合线程使用。

打印流

  PrintWriterPrintStream

  •可以直接操作输入流和文件。

序列流

  SequenceInputStream

  •对多个流进行合并。

操作对象

  ObjectInputStreamObjectOutputStream

  •被操作的对象需要实现Serializable (标记接口);

 

操作基本数据类型

DataInputStreamDataOutputStream

操作字节数组

ByteArrayInputStreamByteArrayOutputStream

操作字符数组

CharArrayReaderCharArrayWrite

操作字符串

StringReader StringWriter

 

8.  字符编码

字符流的出现为了方便操作字符。

更重要是的加入了编码转换。

通过子类转换流来完成。

  InputStreamReader

  OutputStreamWriter

在两个对象进行构造的时候可以加入字符 集。

 

编码表的由来

 计算机只能识别二进制数据,早期由来是 电信号。

 为了方便应用计算机,让它可以识别各个 国家的文字。

 就将各个国家的文字用数字来表示,并一 一对应,形成一张表。

 这就是编码表。

 

常见的编码表

ASCII:美国标准信息交换码。

  •用一个字节的7位可以表示。

ISO8859-1:拉丁码表。欧洲码表

  •用一个字节的8位表示。

GB2312:中国的中文编码表。

GBK:中国的中文编码表升级,融合了更多的中文文字符号。

Unicode:国际标准码,融合了多种文字。

  •所有文字都用两个字节来表示,Java语言使用的就是unicode

UTF-8:最多用三个字节来表示一个字符。

 

转换流的编码应用

  可以将字符以指定编码格式存储。

  可以对文本数据指定编码格式来解读。

  指定编码表的动作由构造函数完成。

 

字符编码

  编码:字符串à字节数组

  解码:字节数组à字符串

 

-------------- android培训、java培训期待与您交流! --------------

详情请查看:http://edu.csdn.net/heima


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值