`

18.java IO 系统

阅读更多

1.File类
  File既可以代表一个文件,又可以是一组文件。FilePath更适合File类。
2.输入输出
  流
  代表又能产出数据的数据源对象或者有能力接受数据接收端对象。
  java中流类库让人迷惑主要原因是:创建单一的结果流,却需要创建多个对象。
 
               java.io.InputStream
 _______________________|______________________________
 |                                                     |
ByteArrayInputStream(内存缓冲区)                FilterInputStream(装饰器)
StringBufferInputStream(String )_____________________|____________________________
FileInputStream(文件)           |                |                    |          |
PipedInputStream(管道)     DataInputStream BufferedInputStream  LineNumInpuStream XXX
                             基本类型读取    缓冲区读取           增加行号读取


左边4个是基础流,所有流都必须从四个中选一个,根据想添加的功能,从右边选择一个装饰。如:
DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(path)));


                    java.io.OutpuStream
______________________________|__________________________  
|                                                        |
ByteArrayOutputStream(送往内存缓冲区)               FilterOutputStream(装饰器)         
FileOutputStream(写往文件)             __________________|_______________
PipedOutputStream(用于多线程)          |                 |               |
                                 DataOutputStream    PrintStream   BufferedOutputStream    
                                  基本类型读取         格式化输出       缓冲区写操作

Reader 和 Writer主要是为了处理用于国际化的16位Unicode字符,老的I/O继承结构仅支持8位的字节流。
两个继承结构的对应关系中,
InputStream              Reader 适配器InputStreamReader
ByteArrayInputStream     CharArrayReader
StringBufferInputStream  StringReader

3.标准I/O
  System.in是一个没有被包装过的InputStream
  System.out System.err都是包装过的printStream
  BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));//将System.in包装成Reader
  PrintWriter out = new PrintWriter(System.out,true); //将System.out包装成Writer
  标准I/O重定向
  当屏幕上有大量输出时,滚动太快无法阅读,所以重定向。
  setIn(in)
  setOut(out)
  setErr(out)

4.新I/O
 
5.压缩
  类似于装饰类,用法直观
  BufferedOutputStream out = new BufferedOutputStream(
                                 new GZIPOutputStream(new FileOutputStream("test.gz"))); 
  其他操作留给通常的I/O读写
  如果保存多个文件,用zip
  ZipOutputStream zos = new ZipOutputStream(
                             new CheckedOutputStream(new FileOutputStream("test.zip"),new Adler32()));
                                        |                                                   |
                                      校验类                                          Adler32快CRC32慢,准

  jar打包
  jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...
{ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示:
-c 创建新的 JAR 文件包
-t 列出 JAR 文件包的内容列表
-x 展开 JAR 文件包的指定文件或者所有文件
-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中) 
  
[vfm0M] 中的选项可以任选,也可以不选,它们是 jar 命令的选项参数

-v 生成详细报告并打印到标准输出
-f 指定 JAR 文件名,通常这个参数是必须的
-m 指定需要包含的 MANIFEST 清单文件
-0 只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快
-M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数    

[jar-文件] 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数

[manifest-文件] 即 MANIFEST 清单文件,它是 -m 参数的附属参数

[-C 目录] 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 JAR 文          件包的时候可用。  
   
6.对象序列化
  a.基本概念
  what?将实现了Serializable接口的对象转换成一个字节序列,并能恢复。
  usage?一是java的远程方法调用(Remote Method Invocation,RMI) 消除系统间不同。
        二是保存javabean的配置信息
  可以用它实现轻量级持久性。
  持久性:对象的生存周期不依赖程序是否执行。
  轻量级:不能靠某些持久的关键字定义对象,让系统做更多工作,简而言之,不够自动化。
  例子code:
  Worm w  = new Worm(6,"a");
  ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("worm.out"));
  out.writeObeject("Worm storage\n");//先序列化了字符串
  out.writeObeject(w); //写对象w
 
  ObejectInputStream in = new ObjectInputStream(new FileInputStream("worm.out"));
  String s = (String) in.readObeject();
  Worm w2 = (Worm) in.readObeject();
  以上是序列化的流程,序列化是基于字节的,所以要使用InputStream和OutputStream继承层次结构
 
  b.序列化控制之一--Externalizable接口
    Externalizable继承Serializable,实现的Externalizable都有ReadExternal和WriteExternal方法
    分别在读写时自动调用,特别的,在恢复对象时,是通过调用pulic的默认构造器实现,所以必须在
    ReadExternal中写上域初始化语句,否则,达不到预期对象。这也是序列化过程控制的问题。
  c.序列化控制之二--transient关键字
    public transient String password;这部分不用序列化。
  d.序列化控制之三--Externalizable的替代方法
    在实现Serializable的类中添加ReadObject和WriteObject方法,并在其中加入一些自定义操作,在序列化
    时将会被自动调用,达到序列化控制的目的。
 
 

分享到:
评论

相关推荐

    Java学生成绩管理系统源代码

    Java学生成绩管理系统源代码: imporjava.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io....

    JAVA面试经典整合

    3.Java IO 4.Java 基础 5.Java 容器 6.Java 并发 7.Java 虚拟机 8.Leetcode 题解 9.Leetcode-Database 题解 10.Linux 11.MySQL 12.Redis 13.Socket 14.SQL 15.代码可读性 16.代码风格规范 17.分布式 18.剑指 offer ...

    java IO流详解-01.ppt

    IO系统-01.ppt IO系统-01.ppt IO系统-01.ppt IO系统-01.ppt IO系统-01.ppt

    NativeIO.java

    Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed ...

    java IO系统与正则表达式

    java IO系统与正则表达式

    彻底明白java的io系统

    通过实例学习java的io系统,让io系统不再成为java新手的心头大患

    JavaIO.ppt

    Java 的 IO 流主要包括输入、输出两种 IO 流,每种输入、输出流有可分为字节流和字符流两大类: 字节流以字节为单位来处理输入、输出操作 字符流以字符为单位来处理输入、输出操作

    基于java swing 的学生信息管理系统

    本系统采用jcreator 4.5+access 2003数据库开发 SimsLogin.java是登陆窗口类 maniframe.java是主窗口类 studentmanageframe.java是学生信息主窗口类 studentinfo.java是学生查询 添加 删除类 DBconnection.java...

    Java中IO系统总结[整理].pdf

    Java中IO系统总结[整理].pdf

    Java,彻底明白Java语言中的IO系统

    Java,彻底明白Java语言中的IO系统 Java,彻底明白Java语言中的IO系统 java基础知识

    学生管理系统

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io....

    JavaIO系统基础知识.pdf

    JavaIO系统基础知识.pdf

    彻底明白 Java 语言中的IO系统

    彻底明白 Java 语言中的IO系统 彻底明白 Java 语言中的IO系统

    Java IO 系统外文文献翻译.doc

    Java IO 系统外文文献翻译.doc

    java.io 学习

    使用Date 类获取系统当前时间 Calendar类的使用 使用 Random 类的对象生成随机数 Collection 类的对象的使用 HashMap 对象以键和值的关系形式存储数据

    java.io 包 .ppt

    使用Date 类获取系统当前时间 Calendar类的使用 使用 Random 类的对象生成随机数 Collection 类的对象的使用 HashMap 对象以键和值的关系形式存储数据

    彻底明白Java的IO系统

    彻底明白Java的IO系统,知道I/O内部运行机制。

    java7源码-JavaIO:JavaIO

    JavaIO ##JavaIO基础面试题 1. 什么是IO 它是一种数据的流从源头到目的地。比如文件拷贝,输入流和输出流都包括了。输入流是从文件中读取数据到存储到进程(process)中,输出流是从进程中读取数据然后写入到目标文件...

Global site tag (gtag.js) - Google Analytics