IO流/属性类/序列化

一:IO流

1.合并流

 构造方法1:
  public SequenceInputStream(InputStream s1,InputStream s2)
示例:
        //分别封装这个两个java文件
        InputStream s1 = new FileInputStream("DataStreamDemo.java") ;
        InputStream s2 = new FileInputStream("ByteArrayStreamDemo.java") ;

        //创建合并流对象
        SequenceInputStream sis = new SequenceInputStream(s1, s2) ;
//构造方法2
SequenceInputStream(Enumeration<? extends InputStream> e) 
 通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。
Vector集合中Enumeration<E> elements() 返回此向量的组件的枚举。
示例:
InputStream s1 = new FileInputStream("DataStreamDemo.java") ;
        InputStream s2 = new FileInputStream("ByteArrayStreamDemo.java") ;
        InputStream s3 = new FileInputStream("CopyFileDemo.java") ;

        //添加到集合中
        v.add(s1) ;
        v.add(s2) ;
        v.add(s3) ;

        //调用特有功能:
        //public Enumeration<E> elements()
        Enumeration<InputStream> en = v.elements() ;
        //创建合并刘对象
        SequenceInputStream sis = new SequenceInputStream(en) ; 

2.数据输入/出流

//构造方法`
DataOutputStream(OutputStream out) 
          创建一个新的数据输出流,将数据写入指定基础输出流。

示例:
//DataOutputStream dos = new DataOutputStream(new FileOutputStream("dos.txt"));
DataInputStream(InputStream in) 
          使用指定的底层 InputStream 创建一个 DataInputStream。
示例:
//DataInputStream dis = new DataInputStream(new FileInputStream("dos.txt"));
常用方法:
 void writeBoolean(boolean v) 
          将一个 boolean 值以 1-byte 值形式写入基础输出流。 
 void writeByte(int v) 
          将一个 byte 值以 1-byte 值形式写出到基础输出流中。 
 void writeBytes(String s) 
          将字符串按字节顺序写出到基础输出流中。 
 void writeChar(int v) 
          将一个 char 值以 2-byte 值形式写入基础输出流中,先写入高字节。 
 void writeChars(String s) 
          将字符串按字符顺序写入基础输出流。 
 void writeDouble(double v) 
          使用 Double 类中的 doubleToLongBits 方法将 double 参数转换为一个 long 值,然后将该 long 值以 8-byte 值形式写入基础输出流中,先写入+-------------------------------------------------------------------------------高字节。 
 void writeFloat(float v) 
          使用 Float 类中的 floatToIntBits 方法将 float 参数转换为一个 int 值,然后将该 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。 
 void writeInt(int v) 
          将一个 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。 
 void writeLong(long v) 
          将一个 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。 
 void writeShort(int v) 
          将一个 short 值以 2-byte 值形式写入基础输出流中,先写入高字节。 
 void writeUTF(String str) 
          以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。 

3.内存操作输入/出流

内存操作输入流

//构造方法
ByteArrayInputStream(byte[] buf) 
          创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
示例:
ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
//创建内存操作输出流对象
byte[] buffer = baos.toByteArray() ;
//创建内存操作输入流对象
ByteArrayInputStream bais = new ByteArrayInputStream(buffer) ;
//常用方法
 byte[] toByteArray() 
          创建一个新分配的 byte 数组。 
 int read() 
          从此输入流中读取下一个数据字节。 
 int read(byte[] b, int off, int len) 
          将最多 len 个数据字节从此输入流读入 byte 数组。 
void close() (查看源码可知该方法为空方法,故可以不关闭)
          关闭 ByteArrayInputStream 无效。 

内存操作输出流

//构造方法
ByteArrayOutputStream() 
          创建一个新的 byte 数组输出流。
//常用方法
 void write(byte[] b, int off, int len) 
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte 数组输出流。 
 void write(int b) 
          将指定的字节写入此 byte 数组输出流。 

4.打印流

特点:(1)打印流不能操作数据源,只能操作目的地的数据(对数据进行打印)
(2)自动刷新
(3)可以对文本文件进行操作

1.字节打印流

//构造方法
PrintStream(OutputStream out, boolean autoFlush) 
          创建新的打印流。

2.字符打印流

//构造方法
PrintWriter(Writer out, boolean autoFlush) 
          通过现有的 OutputStream 创建新的 PrintWriter。
参数autoFlush指定为true,自动刷新
//常用方法
void println(String x) 
          打印 String,然后终止该行。
 void write(String s) 
          写入字符串。  

5.随机访问流

//构造方法
public RandomAccessFile(String name, String mode)
        参数一:指定该文件的路径
        参数二:指定的一种模式:常用的模式:"rw",这种模式是可以读也可以写
常用方法:
 long getFilePointer() 
          返回此文件中的当前偏移量。 

6.标准输入输出流

输入流

in:----->InputStream is = System.in ; 
键盘输入方式1
Scanner sc=new Scanner(System.in);
键盘输入方式2
BufferedReader br=new BufferedReader(new InputStreamReader(Ssytem.in));

输出流

out----->PrintStream ps = System.out ;
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

二:属性类

Properties:属性集合类,该类继承自Hashtable<K,V>,该类属于Map集合
//构造方法
public Properties():创建一个空属性列表
//常用方法
 Object setProperty(String key, String value) 
          调用 Hashtable 的方法 put。 

 void store(Writer writer, String comments) 
          以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。 
 void load(Reader reader) 
          按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。 
 String getProperty(String key) 
          用指定的键在此属性列表中搜索属性。 

三:序列化

如果一个类实现了标记接口:Serializable,那么对应的该类加载的时候,会产生一个ID
序列化和反序列化版本号不一致,会出现InvalidClassException
解决方法:
1)要么改动当前某个类中的数据之后,然后重新序列化和反序列化
这种做法不符实实际要求,在实际开发中,可能直接读数据:将流数据—>还原成对象
2)发现黄色警告线,点击它:生成一个固定ID
比如一个类中有很多成员变量,并不想让一些成员变量被序列化,Java提供了一个关键字:
transient:不用被序列化的时候用它修饰

对象----->>流对象
该对象所在的类一定要实现标记接口serializable
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值