20170831 - A - Java IO操作

1 当需要将对象转化为字节用什么?
对象流
Person p = new Person("苍老师",18,"男" ,list);
System.out.println(p);

FileOutputStream fos = new FileOutputStream("person.obj");
ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(p);
oos.close();

2 使用对象流字节化对象时需要注意什么?
被字节的对象必须实现serialzable

3 如何将字节化的对象转换为文件数据?
使用对象输入流加载连接字节化对象的文件流,用于将一组字节(通过对象输出流写出对象而转换的一组字节)读取并转换为相应的对象
//unicode存的话就是两个字节。
FileInputStream fis = new FileInputStream("person.obj");
ObjectInputStream ois = new ObjectInputStream(fis);

Person p = (Person)ois.readObject();
System.out.println(p);

ois.close();

4 什么是对象序列化,对象反序列化?
对象输出流将对象写出时转换为一组字节的过程称为:对象序列化
对象输入流将这组字节读取并还原成对象的过程称为:对象反序列化

5 对象反序列化返回的是二进制的数据还是对象?
直接是Object型的对象,因为OIS已经将读取的二进制数据进行了转换。

5 一旦实现了serializable接口,就需要?
维护serial..UID,提高类的兼容性。
类在反序列化时会先检查两者的UID是否一致,因此若不维护,靠系统自动生成,而一旦再修改类,UID便会自行变化,因此需要在实现接口时便维护。

6 如何选择性写出对象属性?何时需要使用?
使用transient关键字,一旦使用该关键字,该属性的值为null。当需要对对象进行瘦身的时候。
(private transient String gender;)

7 按单位分流,字节流,字符流。

8 java内字符皆是char型数据?

9 用什么读取字符?
/**
* java根据流读写数据的单位划分为:字节流,字符流
* 字节流以字节为单位读写数据。
* 字符流以字符(unicode)为单位读写数据,但是底层本质上还是读写字节,只是字节与字符的转换工作由字符流完成
*
* Write与Reader是所有字符流的父类,他们是一对抽象类,
* 规定了所有字符流都要具备的读写字符方法。
*
* 转换流
* OutputStreamWriter与InputStreamReader是字符流的一对常见实现类
* @author admin
*
*/

10 可以用字符流复制mp3文件吗?
不行,字符流只能操作字符。

11 用什么流可以直接写入字符串?
OutputStreamWriter

FileOutputStream fos = new FileOutputStream("osw.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.write("在光滑的路上,摩擦");
osw.write(",摩擦,摩擦。");
osw.close();

12 如何制定字符输入流的字符编码模式?
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");

13 如何输出获取的字符串?
FileInputStream fis = new FileInputStream("osw.txt");
InputStreamReader isr = new InputStreamReader(fis,"gbk");

int d = -1;
while((d = isr.read()) != -1){
System.out.println((char)d);
}

char[] data = new char[100];
int len = isr.read(data);
String str = String.valueOf(data, 0, len);
System.out.println(str);

isr.close();
使用isr的read()或read(char[])方法
同样可以指定
InputStreamReader isr = new InputStreamReader(fis,"gbk");
read返回int型数组的低八位(即对应unicode值)
read(char[])会存入数组指定数量的字符。因此一个需要转换,一个不需要。

字符流只接在字节流上。

14 如何按行写入字符串?
PrintWriter pw = new PrintWriter("pw.txt");

15 PrintWriter是否可以指定写出字符编码模式?
不可以,所以当必须指定时,连接到转换流上,所以必须新建字节流(只省了一步BW)
FileOutputStream fos = new FileOutputStream("pw2.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");

16 参数中的csn是什么意思?
charset name

17 缓冲字符流有哪些?
* 缓冲字符流内置缓冲区,可以提高读写字符效率,
* 并且缓冲字符流的特点是可以按行读写字符串
* java.io.BufferedWrite
* java.io.BufferedReader
*
* java.io.PrintWrite是常用的缓冲字符输出流,
* 并且还提供了自动行刷新功能。由于创建PrintWrite时
* 期内嵌了BufferedWriter,所以实际的缓冲操作是BufferedWriter实现。

17 PW的工作原理是?
/*
* PW支持对文件的操作的构造方法
*
* PW内部原理:
* PW嵌套了BW——加快读写,且PW可以换行,可自动行刷新
* PW内的BW再嵌套了OSW——字符转换成字节
* PW内的BW的OSW嵌套了F0S——写入字节
*/

PW内嵌了BW加快读写,BW连接了字符转换流OSW,OSW再连接了字节流获取字节数据。

18 如果文件不关闭,读写能否完成?
不能,因为文件还存储在缓冲区中(除非大于缓存区缓存)。

19 什么是自动行刷新?
使用PW的println时,会自动在每次输入后flush(),即文件不关闭,也完成读写。
原本需要close才会调用flush()

PrintWriter(OutpuStream out,boolean autoflush)
PrintWriter(Writer out,boolean autoflush)

20 如何一次性读取一行字符串。
public class BufferedReader_readLine {

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileInputStream fis = new FileInputStream
("src"+File.separator+
"day08"+File.separator+
"BufferedReader_readLine.java");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
/*
* BufferedReader提供方法:
* String readLine()
* 连续读取若干字符,知道读取了换行符为止,
* 将之前的所有字符以一个字符串形式返回。
* 注意:返回的字符串不包含换行符
* 若返回值为null,则表示已到文件末尾
*/

String line = null;
while((line = br.readLine()) != null){
System.out.println(line);
}

br.close();
}

}
PW BR
OSW ISW
FOS FIS

22 所有异常的父类是什么,有什么子类?
Throwable,其下有两个子类——
程序错误:Exception
Java运行环境错误:Error

23 发生错误时会抛出给?
调用代码的代码块

24 Java如何处理错误?
try{
String str = null;
System.out.println(str.length());
}catch(NullPointerException e){//捕获异常实例
System.out.println(e);
String str = "123";
System.out.println(str.length());
}

25 如果错误处理代码块内出现错误会怎样?如何处理?

26 可否捕捉不同的错误?
try{
System.out.println(str.charAt(3));
System.out.println(str.length());
}catch(NullPointerException e){
System.out.println(e);
}catch(Exception e){
System.out.println(e);
}

27 finally中的代码什么情况系会执行?
任何情况,不管是否报错,
甚至try中return了,也在执行finally中的代码块才会跳出。

28 实例化的IO对象,最后必须关闭,在finally中关闭时,必须判断是否为null值。
FileOutputStream fos = null;
try {
fos = new FileOutputStream("fos.txt");
fos.write("你好"<br />.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
if(fos != null){
fos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

29 finalize是什么?
object类中定义的方法,当一个对象即将被GC释放前,GC会调用该对象的finalize方法,调用后该对象即被释放。

时间: 2024-11-09 14:39:00

20170831 - A - Java IO操作的相关文章

20170831 - Q - Java IO操作

1 当需要将对象转化为字节用什么? 2 使用对象流字节化对象时需要注意什么? 3 如何将字节化的对象转换为文件数据? 4 什么是对象序列化,对象反序列化? 5 对象反序列化返回的是二进制的数据还是对象? 5 一旦实现了serializable接口,就需要? 6 如何选择性写出对象属性?何时需要使用? 7 按单位分流,字节流,字符流. 8 java内字符皆是char型数据? 9 用什么读取字符? 10 可以用字符流复制mp3文件吗? 11 用什么流可以直接写入字符串? 12 如何制定字符输入流的字

Java IO操作:合并流

合并流:把两个文件合并在一起. 主要操作的是内容. 定义: public class SequenceInputStreamextends InputStream 方法摘要: 操作步骤: 1,分别建立两个FileInputStream实例对象,用于输出指定两个文件. 2,建立一个FileOutputStream实例,用于合并写入两个文件. 2,通过SequenceInputStream类,把两个文件的内容合并起来,放到这个类实例流中. 3,把SequenceInputStream实例的内容读取出

JAVA IO操作:数据操作流:DataOutputStream和DataInputStream

掌握DataOutputStream和DataInputStream的作用. 可以使用DataOutputStream和DataInputStream写入和读取数据. 在IO包中提供了两个与平台无关的数据操作流 数据输出流:DataOutputStream 数据输入流:DataInputStream 通常按照一定格式将输入输出,再按照一定格式将数据输入. 要想使用数据输出流和输入流,则肯定要用户指定数据的保存格式.必须按指定的格式保存数据,才可以将数据输入流将数据读取进来. DataOutput

Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)

学习目标 掌握流的概念 掌握字节流与字符流的作用 掌握文件的标准操作步骤 掌握字节与字符操作的区别 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序中需要数据的时候就用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输出都是以流的形式保存的,流中保存的实际上全部是字节文件. 字节流与字符流 在java.io包中操作文件内容的主要有两大类:字节流和字符流,两类都分为输入和输出操作.在字节流中输出数据主要是使用OutputStream完成,输入

java IO操作:FileInputStream,FileOutputStream,FileReader,FileWriter实例

FileInputStream   <span style="font-family:Verdana;">import java.io.File; import java.io.FileInputStream; import java.io.InputStream; public class TestFileInputStream { public static void main(String[] args) throws Exception { // 异常抛出, 不处理

Java IO 操作文件

1. 写文件 如果是文本 推荐使用 BufferedWriter bw = new BufferedWriter(new FileWriter("G:/新建文件夹/add2.txt", true));// 文件追加 long begin4 = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { bw.write("测试java 文件操作\r\n"); } bw.flush(); bw.c

java IO操作

java7中引入自动资源管理(ARM),使用try(){}catch{}finally{},()中的资源会在程序运行后自动释放. 文件流分为输入流和输出流,典型用法 FileReader fr = new FileReader("poem.txt");           //读取已有文件FileWriter fw = new FileWriter("newPoem2.txt"):   //向特定名文件写入(不存在先创建),覆盖       char[] cbuf

JAVA 基础 IO操作

java.io操作是java基础中的基础,如果没有io操作程序都不会运行起来,所以,又回顾了一下java.io操作的内容,里面的对象序列化是J2EE的基础,是java中分布式部署和调用实现的基础,还有很有对文件系统.对网络资源的读写等等. 对于里面的个人觉的比较重要的知识做了一个图总结了一下.如下: 这里对于重点的理解和使用总结几点 1.概念理解 对于java.io的概念一直理解的有点偏差,首先这里面涉及到一个方向性的概念,即我们数据从哪里来到哪里去,在java.io操作中以及里面的很多概念和类

java的IO操作:System类对IO的支持。

目标: 1,掌握SYStem对IO的三种支持: system.out system.in system.err 2,掌握system.out及system.err的区别. 3,掌握输入,输出重定向. System类的常量 java给system类对IO有一定支持,预制了三个常量. PrintStream out,PrintStream err,InputStream in. 使用static final 声明的变量是全局常量,只要是常量,所有单词字母必须全部大写.但是这里没有,是java历史遗留