IO——11

个人笔记11

Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出。
在变量、数组、对象和集合中存储的数据是暂时存在的,一旦程序结束它们就会丢失。为了能够永久地保存程序创建的数据,需要将其保存到磁盘文件中,这样就可以在其他程序中使用它们。Java 的 I/O(输入/输出)技术可以将数据保存到文本文件和二进制文件中, 以达到永久保存数据的要求。

IO流的概述

IO分为流IO(java.io)和块IO(java.nio)

Java.io是大多数面向数据流的输入/输出类的主要软件包。此外,Java也对块传输提供支持,在核心库 java.nio中采用的便是块IO。
流IO的好处是简单易用,缺点是效率较低。块IO效率很高,但编程比较复杂。

在 Java 中所有数据都是使用流读写的。流是一组有序的数据序列,将数据从一个地方带到另一个地方。根据数据流向的不同,可以分为输入(Input)流输出(Output)流两种。

输入就是将数据从各种输入设备(包括文件、键盘等)中读取到内存中,输出则正好相反,是将数据写入到各种输出设备(比如文件、显示器、磁盘等)。例如键盘就是一个标准的输入设备,而显示器就是一个标准的输出设备,但是文件既可以作为输入设备,又可以作为输出设备。

1、Java流被分为字节流、字符流两大流类,两者都作为( )类的直接子类。
A、Exception
B、Object
C、Throwable
D、以上都不是

字节流读写文件–读取文件

InputStream 是 Java 所有字节输入流类的父类,OutputStream 是 Java 所有字节输出流类的父类

字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串。
而字节流处理单元为 1 个字节,操作字节和字节数组。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

习题

1、当文件不存在或不可读时,使用FileInputStream读取文件会报下列哪一种错误( )
A、NullPointerException
B、NoSuchFieldException
C、FileNotFoundException
D、RuntimeException

字符传输

OutputStreamWriter字符的桥梁流以字节流:向其写入的字符编码成使用指定的字节charset 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。

每次调用write()方法都会使编码转换器在给定字符上被调用。 所得到的字节在写入底层输出流之前累积在缓冲区中。 可以指定此缓冲区的大小,但是默认情况下它大部分用于大多数目的。

InputStreamReader是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。

每个调用InputStreamReader的read()方法之一可能会导致从底层字节输入流读取一个或多个字节。

utf-8编码,一个中文占三个字节在这里插入图片描述
读出字节在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

字节流读写文件–写入文件(输出)

FileOutputStream继承自java.io.OutputStream
字节流实例写入文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

习题

1、以下选项中,哪个是FileOutputStream的父类?
A、File
B、FileOutput
C、OutputStream
D、InputStream

文件的拷贝

在应用程序中,IO流通常是成对出现的,即输入流和输出流一起使用,例如文件的拷贝就需要通过输入流来读取文件中的数据,通过输出流将数据写入文件。

在这里插入图片描述

习题

1.下列关于java.io.FileOutputStream的说法错误的是( )
A、文件拷贝时,使用输入流读取的文件必须存在。否则抛出java.io.FileNotFoundException
B、文件拷贝时,使用输出流进行文件写出的时候,目标文件名称可以与原文件不同名
C、使用字节流进行文件的拷贝,文件既可以是文本文件也可以是图片、音频等文件
D、使用IO流进行文件拷贝。文件大小不能超过20M,否则内存溢出

字节流的缓冲区

缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写减少系统IO次数,从而提高读写的效率

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

字符流读取文件

FileReader的常用构造方法包括以下几种。

FileReader(String fileName):根据文件名创建FileReader对象。
FileReader(File file):根据File对象创建FileReader对象。

Reader的常用包括方法包括以下几种。

Int read():读取单个字符。返回字符的整数值,如果已经到达文件尾,则返回-1.
int read(char[] cbuf):将字符读入cbuf字符数组。返回读取到的字符数,如果已经到达文件尾,则返回-1.
int read(char[] cbuf,int off,int len):将读取到的字符存放到cbuf字符数组从off标识的偏移位置开始处,最多读取len个字符。与字节流不同,BufferReader是Reader的直接子类,这一点和BufferInputStream是InputStream的二级子类有通过BufferReader.readLine()方法可以实现读取文本行、返回字符串,因为我们平时读取的文本文件大多是断行的,而且该方法能直接返回字符串,因此BufferReader使用得比FileReader更为广泛。

在这里插入图片描述在这里插入图片描述

习题

1、下列选项中,哪个类用于读取文本文件中的字符( )。
A、FileReader
B、FileWriter
C、BufferReader
D、BufferWriter
2、下列选项中,哪个是FileWriter类中read()方法读取到流末尾的返回值?( )
A、0
B、-1
C、1
D、无返回值

字符流写入文件

字符流的两个基类:
Reader:Read()读取字符
Writer:写入字符

在这里插入图片描述

习题

1、下列选项中,不属于FileWriter直接或间接父类的是( )
A、Object
B、Writer
C、OutputStreamWriter
D、 OutputStream
2、FileWriter类的write(int c)方法的作用是( )
A、写入单个字符
B、写入多个字符
C、写入整型数据

字符编码和解码

计算机中,任何的文字都是以指定的编码方式存在的,在 Java 程序的开发中最常见的是 ISO8859-1、GBK/GB2312、Unicode、 UTF 编码。

字符串---->编码(getBytes())------>字节数组
字节数组------>解码(new String(byte[]))------>字符串

GBK编码在这里插入图片描述> UTF -8编码在这里插入图片描述
解码
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值