04747-Java(七)——输入和输出流
- OutputStream的常用方法write(int i),close(),flush()表示将字节i写入到数据流中,将输出流关闭,刷新输出流并强制写出所有缓冲的输出字节。
- Jav中所有涉及数据流的操作中,都会引入包java.io。
- 请说明输入数据流中方法read()和方法read(byte[] b)的作用是什么:【背】
方法read()的作用是:从输入流中读取一个字节的二进制数据。
方法read(byte[] b)的作用是:将多个字节读到数组中,填满整个数组。 - Java中把不同的输入、输出源抽象为流。
什么是数据流,数据流分为哪些类,各类的特点是什么:【背】
数据流是指一组有顺序的、有起点和终点的字节集合。
数据流分为输入数据流和输出数据流,输入数据流只能读不能写,输出数据流只能写不能读。
从数据流中读取数据时,必须有一个数据源与该数据流相连。不是所有对象都可以序列化。
- 接口Serilizable中没有定义任何方法,只作为一个标记指示实现该接口的类可以进行序列化。
- 一般在关闭输出流之前,应先使用flush()方法,强制输出剩余数据。
- 缓冲区的大小可变。
- 使用输入数据流中的read()方法,读取结束时返回-1。
- 对象序列化可以保存的是非静态成员变量。
(对象的序列化是将对象的状态转换为字节流,以便保存到文件或通过网络传输。
序列化关注的是对象的状态,而非类的状态。静态成员变量属于类本身,而非静态成员变量是每个实例对象独有的状态信息。) - 为什么在关闭缓冲区输出流之前应执行flush方法?【背】
对于缓冲区输出流,当执行写入操作时,数据以块为单位进入缓冲区,当缓冲区的块空间被填满数据时才会真正将数据写到了输出流中。在最后一次执行写入操作后,缓冲区的块空间可能未被填满,所以此时没有将块中的数据真正的写入到输出流中,未真正的执行输出操作,此时若直接向该缓冲区输出流,则块中的数据会丢失。所以,在关闭缓冲区输出流之前,应先使用flush()方法,强制将剩余的数据写入到输出流中。 - 请简述过滤器数据流的概念及其种类:【背】
一个过滤器数据流在创建时与一个已经存在的数据流相连,这样在从这样的数据流中读取数据时,它提供的是对一个原始输入数据流的内容进行了特定处理的数据。
过滤器数据流有缓冲区数据流和数据数据流两种。 - FilelnputStream和FileOutputStream的数据源或数据终点都应当是文件。
- 顶层容器都有一个内容窗格。
- Java如何实现对象的序列化?【背】
Java中有一个接口java.io.Serializable,接口Serializable中没有定义任何方法,只是作为一个标记来指示实现该接口的类可以进行序列化,当一个类声明实现了Serializable接口时,表明该类的对象是可以序列化的,否则不能序列化。 - 写Java基本数据类型需要用DataOutputStream。
- 请写出采用缓冲式输入方式,按行输入文件内容的步骤:
先创建FilcReaer对象(1分),
再利用FileReader对象创建BufferedReader对象(1分),
然后对该对象使用readLine()方法(1分)。 - 字节流和字符流
处理字节流:BufferInputStream & BufferOutputStream,FileInputStream & FileOutputStream,ObjectInputStream & ObjectOutputStream。
处理字符流:InputStreamReader & OutputStreamWriter(InputStreamReader和OutputStreamWriter是字符流和字节流之间的桥梁,InputStreamReader将字节流转字符流,OutputStreamWriter将字符流转字节流)。 - 程序要采用缓冲式输入,只要先创建FileReader对象,再利用FileReader对象创建BufferedReader对象,习惯称为FileReader对象接到BufferedReader对象上。
1
2
3
4BufferReader br;
FileReader fr=new FileReader("abc.txt");
br=new BufferReader(fr);//BufferReader实例的参数只能是Reader结尾的类型
String s=br.readLine(); System.in
用于控制台输入数据读取
转为代码中字符处理的过程:1
InputStreamReader isr=new InputStreamReader(System.in);
- 读c盘下java文件夹中的1.data,输出文件名、内容、文件大小:
1
2
3
4
5
6
7
8
9
10
11File f=new File("C:\\java\\1.data");
System.out.println("文件名:"+f.getName());
FileInputStream fis=new FileInputStream(f);
InputStreamReader isr=new InputStreamReader(fis);
BufferReader br=new BufferReader(isr);
System.out.println("文件内容:");
String s;
while((s=br.readLine())!=null){
System.out.println(s);
}
System.out.println("文件大小:"+f.length) - 请说明Java基本字符流中读者、写者出现的原因及作用:
有些程序设计语言使用ASCI字符集,而Java使用Unicode字符集表示字符和字符串。
ASCII字符集以一个字节表示一个字符,可以认为一个字符就是一个字节。
Java使用两个字节表示一个字符,这时字节与字符就不再相同。Java为实现与其他程序语言及不同平台的交互,提供了一种新的数据流处理方案,称为读者和写者。读者和写者的作用是在字节流和字符流之间作中介,在构造方法中应指定一定的平台规范,以便把以字节方式表示的流转换为特定平台上的字符表示。 - FileWriter类的作用是字符流文件写操作。
- Java语言使用的字符集是Unicode。
在BufferReader类中,能实现按行输入的方法为readLine。
File类不能实现的:写入数据;读写文件;getContent();
- File类的重命名文件方法是
f.renameTo(nf);
,获取文件名getName()
,获取文件路径名getPath()
。 - File类的getParent()方法的作用是:获取文件父级目录名称。
- Java提供的随机访问文件的类为RandomAccessFile,该类读取一个字符的方法是readChar(),向文件写入一个字符的方法是writeChar()。
- FileInputStream的read0方法读取各字符的ASCII码
- 能够输入输出对象的流称为对象流。
- 序列化,反序列化
- InputStream类能从输入流中读一个字节的二进制数据的方法是read,能将一个字节的二进制数据写入输出流的是write。
- Java中的缓冲区字符输入流类是BufferedReader,缓冲区字符输出流类是BufferedReader。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 珍珠巧克力!
评论
GitalkValine