`
hao861002
  • 浏览: 87093 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java复习第十五天

阅读更多

一、
(一) DataInputStream/DataOutStream增加读写
    关流只关最外层的过滤流就行了\
(二) BufferedInputStream/BufferedOutputStream增加缓冲区
    void flush()刷新此缓冲的输出流。

   
(三) 管道流(和UnixC++中的FIFO相同)
  ■ PipedInputStream和PipedOutputStream (字节流)
    这两个是节点流,注意,用来在线程间通信。
    所有输入流读方法都是阻塞的
  PipedOutputStream pos=new PipedOutputStream();
PipedInputStream pis=new PipedInputStream();
try
{
pos.connect(pis);
new Producer(pos).start();//线程类对象,在构造时,使用管道流通信
new Consumer(pis).start();//线程类对象,在构造时,使用管道流通信
}
catch(Exception e)
{
e.printStackTrace();
}

(四)随机存取文件

RondomAccessFile类允许随机访问文件,这个类也是支持直接输出输入各种数据类型。
GetFilepoint()可以知道文件中的指针位置,使用seek()定位。
Mode(“r”:随机读;”w”:随机写;”rw”:随机读写)
1) 实现了二个接口:DataInput和DataOutput;
2) 只要文件能打开就能读写;
3) 通过文件指针能读写文件指定位置;
4) 可以访问在DataInputStream和DataOutputStream中所有的read()和write()操作;
5) 在文件中移动方法:
a. long getFilePointer(): 返回文件指针的当前位置。
b. void seek(long pos): 设置文件指针到给定的绝对位置。
c. long length(): 返回文件的长度。



二、 字符流
  ■ 字符流可以解决编程中字符的编码问题。从字符到整数,对字符集和整数集建立一一对应的关系,就算叫做编码,从整数映射到字符,就叫做解码。

  ■ 编码问题:

    字节流的字符编码:
    字符编码把字符转换成数字存储到计算机中,按ASCii将字母映射为整数。
    把数字从计算机转换成相应的字符的过程称为解码。

    编码的方式:
    每个字符对应一个整数。不同的国家有不同的编码,
    当编码方式和解码方式不统一时,产生乱码。因为美国最早发展软件,所以每种的编码都向上兼容ASCII 所以英文没有乱码。

    ASCII(数字、英文)1个字符占一个字节(所有的编码集都兼容ASCII)
    ISO8859-1(欧洲)  1个字符占一个字节
    GB-2312/GBK        1个字符占两个字节
    Unicode            1个字符占两个字节(网络传输速度慢)
    UTF-8              变长字节,对于英文一个字节,对于汉字两个或三个字节。


  ■ InputStreamReader和OutputStreamWriter(字节流转化成字符流的桥转换器)
这两个类不是用于直接输入输出的,他是将字节流转换成字符流的桥转换器,并可以指定编解码方式。

    Reader和Writer (字符流类,所有字符流的父类型)

1) Java技术使用Unicode来表示字符串和字符,而且提供16位版本的流,以便用类似的方法处理字符。
2) InputStreamReader和OutputStreamWriter作为字节流与字符流中的接口。
3) 如果构造了一个连接到流的Reader和Writer,转换规则会在使用缺省平台所定义的字节编码和Unicode之间切换。

BufferedReader/(BufferedWriter,不常用)(这两个类需要桥转换)
PrintWriter(带缓存的字符输出流,不需要桥转换)

常用输入输出类型,不需要桥接,其中其它方法请参看API文档。
以上两个都是过滤流,需要用其他的节点流来作参数构造对象。
BufferedReader的方法:readLine():String ,当他的返回值是null时,就表示读取完毕了。要注意,再写入时要注意写换行符,否则会出现阻塞。
BufferedWriter的方法:newLine() ,这个方法会写出一个换行符。
PrintWriter的方法:println(….String,Object等等)和write(),println(...)这个方法就不必再写换行符了,在使用时会自动换行。

注意:在使用带有缓冲区的流时,在输入之后就要flush()方法,把缓冲区数据发出去。

原则:保证编解码方式的统一,才能不至于出现错误。
java.io包的InputStreamread输入流的从字节流到字符流的桥转换类。这个类可以设定字符转换方式。
OutputStreamred:输出流的字节流桥转换成字符流
Bufferread有readline()使得字符输入更加方便。
在I/O流中,所有输入方法都是阻塞方法。
Bufferwrite给输出字符加缓冲,因为它的方法很少,所以使用父类PrintWrite,它可以使用字节流对象,而且方法很多。

三、StringTokenizer
java.util
类 StringTokenizer


四、 对象序列化
  ■ 把对象放在IO流上
ObjectInputStream和ObjectOutputStream(对象流)

对象流是过滤流,需要节点流作参数来构造对象。用于直接把对象写入文件和从文件读取对象。
只有实现了Serializable接口的类型的对象才可以被读写,Serializable接口是个标记接口,其中没有定义方法。对象会序列化成一个二进制代码。

writeObject(o),readObject()这两个是对象读写操作时用的方法。

Object o = new Object();
FileOutputStream fos=new FileOutputStream("Object.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(o);
oos.close();

FileInputStream fis =new FileInputStream(“Object.txt”);
ObjectInputStream ois =new ObjectInputStream(fis);
Object o = (Object)Ois.readObject();
ois.close();

对象流读取结束返回 EOFException异常对象。

一个类中有其他类型的对象,那么,这个类实现了Serializable接口,在对象序列化时,也同样要求这个类中属性都能够对象序列化(基本类型除外)。

注意:对于对象流的操作,在写对象时要一次写入完毕,如果使用追加模式写入,只会读取到上一次写入的对象,使用对象流写入时,会先写入一个头部,然后写入数据,
     最后加上结束符号,如果使用追加方式写入的话,那就会在结束符号继续向下写入,但是在读取时只会读到结束符为止,以后再次写入的数据就会丢失。

注意:在使用对象流写入对象时要一次向文件写入,不能够采用追加方式。

serialver命令判断是否一个属性或对象可序列化,
serialver TestObject(TestObject必须为已经编译,也就是.class)
执行结果:如果不可序列化;则出现不可序列化的提示。如果可以序列化,那么就会出现序列化的ID:UID。

Externalizable这是Serializable的子接口,他可以让用户自定义如何序列化对象。
readExternal(ObjectInput in),writeExternal(ObjectOutput out)这是这个接口中的两个方法,通过这两个方法可以定制序列化过程。这个方法不安全,可以调用以上两个方法改变对象的状态。

transient只能用来修饰属性。表示这个属性在对象序列化时将被忽略。
transient int num;
表示当我们对属性序列化时忽略这个属性(即忽略不使之持久化)。所有属性必须都是可序列化的,特别是当有些属性本身也是对象的时候,要尤其注意这一点。


java.util.StringTokenizer类,这个类是用于字符串截取的。
StringTokenizer(参数1,参数2)按某种符号隔开文件
StringTokenizer(s,”:”) 用“:”隔开字符,s为对象。

补充:字节流结束返回-1,字符流结束返回null,对象流结束返回 EOFException
引申---------〉异常经常被用在流程控制, 异常也是方法的一种返回形式。


作业:
用字符流把文件中的唐诗排列成古文的格式
用对象序列化把若干Employee对象写到文件中,再读取出来

项目练习:
修改Bank类,账户信息会采用对象序列化的方式存放在文件中.当Bank对象生成的时候会读取文件,设置账户集合.当账户信息改变的时候,会随时更新文件
设计一个FileDAO类(文件数据访问对象),负责对文件的访问,包括存放账户,提取账户等方法,在Bank类中,会通过FileDAO对象来访问文件

注意:如果已有的账户对象会存在文件中,那么为新的账户对象分配id的做法也应相应的改变,过去的用static属性的做法不再合适,应该改为,把下一个可用的id存放在一个文件中,
    每创建一个新对象的时候都会读取这个文件,获得新对象的id,并且修改文件中的id,使其加1.这个工作可以放在Account类的构造方法中
分享到:
评论

相关推荐

    java 考试复习指南

    【Java 考试复习指南】 1. Java 编译过程:Java 源程序文件(扩展名为 .java)经过Java编译器编译后,会生成字节码文件(扩展名为 .class)。这是Java程序运行的基础,因为JVM(Java虚拟机)执行的是字节码。 2. ...

    JAVA复习ppt

    这个“JAVA复习ppt”很可能是华南理工大学为了帮助学生系统复习Java编程知识而制作的教学材料。Java的特点包括跨平台性、简单性、面向对象、健壮性和安全性,这些特性使得它成为开发桌面应用、企业级应用、移动应用...

    Java语言程序设计基础第十版第十二章课后复习题答案

    根据提供的信息,我们可以总结出以下关于《Java语言程序设计基础第十版》第十二...以上是对《Java语言程序设计基础第十版》第十二章中部分复习题答案的详细解释,希望能帮助读者更好地理解Java中的异常处理及相关概念。

    Java语言程序设计基础课后复习题答案第十三章

    Java 语言程序设计基础课后复习题答案第十三章 本部分内容将详细讲解 Java 语言程序设计基础课后复习题答案第十三章中的知识点。 一、Java 基础知识 1.1 在 Java 中,什么是可变长参数?答:在 Java 中,使用可变...

    java复习题库 计算机认证考试

    【Java复习题库知识点详解】 Java是一种面向对象的高级编程语言,它的主要特点包括:面向对象、跨平台、高性能和丰富的类库。在Java中,程序的基本单位是类,而不是文件,因此选项B描述错误。Java语言区分大小写,...

    JAVA理论知识基础复习

    JAVA理论知识基础复习 JAVA理论知识基础复习是指对JAVA语言的基础知识进行复习和总结,本文将涵盖构造方法、new关键字、方法的重载、特殊变量this、static定义常量、继承、方法的重写、特殊变量super、多态性等相关...

    达内 corejava课程源码及每日课程复习文档

    这个压缩包中包含了课程的源码实例和每日课程的复习文档,为学习者提供了十五天的学习材料。 1. **Java基础**:学习Java首先要了解其基本语法,包括数据类型、变量、运算符、控制结构(如if语句、for循环、while...

    在达内学习java的笔记

    13. **Java复习第十三天**:最后可能会讲解一些高级话题,如集合框架的高级特性和并发库(如ConcurrentHashMap、ExecutorService)的使用,或者JVM内存模型和垃圾回收机制。 通过这些复习笔记,读者可以逐步建立起...

    Java考前突击复习

    Java复习材料。包括《Java技术及其应用》(第二版)(高等教育出版社)的 第6章 java语言中的面向对象特性 第7章 数组和向量 第8章 字符串处理 第10章 异常处理 第11章 输入输出处理 第13章 线程 第14\15章 ...

    Java语言程序设计第10版(基础篇)复习题答案

    《Java语言程序设计第10版(基础篇)》是一本深入浅出的Java编程教材,旨在帮助初学者掌握这门强大的面向对象编程语言。复习题答案提供了对每一章节核心概念的检验和巩固,帮助读者确认对每个主题的理解是否到位。...

    java基础复习

    ### Java基础复习知识点详解 #### 一、Java语言特点 - **高级编程语言**:Java是一种面向对象的高级编程语言,具有以下特点: - **简单性**:语法简洁,易于学习。 - **结构中立**:独立于硬件结构,能够在各种...

    第一学期java复习.doc

    Java基础知识总结 一、 Java基础知识 Java是一种高速、安全、可靠的编程语言,用于开发大型商业应用程序。Java语言的设计目标是“Write Once, Run Anywhere”,即一次编写,到处运行。 二、 变量、数据类型和...

    Java基础复习

    15. **枚举类型**:Java 5引入了枚举,用于表示固定集合的值。枚举类可以拥有方法和字段,比传统的int常量更安全且易于使用。 以上只是Java基础复习的部分内容,实际的学习过程中,还需要结合具体的例题和习题进行...

    java语言程序设计(第八版)复习题答案

    Java语言程序设计是计算机科学领域中的重要课程,其第八版的复习题答案涵盖了广泛的Java编程概念和技术。在学习和掌握Java编程时,了解并解决这些复习题的答案对于深入理解Java的核心概念至关重要。以下是对相关知识...

    java复习文档

    根据提供的文件信息,我们可以整理出以下关键的Java知识点: ### 1. 访问修饰符 public, private, protected, default - **public**: 公有访问级别,可以在任何地方被访问。 - **protected**: 受保护访问级别,...

    北师珠信院Java期末考试复习题.zip

    Java编程语言是信息技术学院学生的重要学习内容之一,尤其在期末阶段,复习题的掌握对于考试成绩至关重要。"北师珠信院Java期末考试复习题.zip"这个压缩包包含了从ch01到ch18的章节练习,覆盖了Java语言的各个方面,...

Global site tag (gtag.js) - Google Analytics