Java之路--Javase篇   IO(3)

android培训、 java培训、期待与您交流!
                       (黑马程序员)  IO包中其他类
Properties
Properties是Hashtable的子类。而且它里面存储的键值对都是String。其实Properties是和IO技术相结合的集合容器,主要用于键值对形式的配置文件,必须是键值对。
Properties常用方法
  |--Object setProperty(String key,String value);和map中的put方法功能一样,
  |--String getProperty(String key);根据键检索值
     String getProperty(String key, String defaultValue);根据键检索值如果没检索到返回默认值
  |-- Set<String> stringPropertyNames();返回键集,相当于Map中的Keyset。
  |--void load(InputStream inStream);
     void load(Reader reader);
     Code:
     public static void myLoad();
     {
       BufferedReader bufr = new BufferedReader(new FileReader("info.txt"));
       String line = null;
       Propertiew prop = new Properties();
       while((line = bufr.readLine())!= null)
       {
         String[] arr = line.split("=");
         prop.SetProperty(arr[0],arr[1]);
        }
       bufr.close();
     System.out.println(prop);
      }
  |--void list(PrintStream out); 将属性列表中内容输出到指定的输出流
     Code:
     prop.list(System.out);
  |--void store(OutputStream out, String comments);将Properties 表中的属性列表(键和元素对)写入输出流。可用此方法将setProperty()的更改保存进物理资源持续性保存。
注意:setProperties方法仅仅操作内存中的Properties对象,并不影响物理资源上的资料,如果不通过store方法作持续性保存,就会自动消失。
打印流
  |--PrintStream
   构造函数可用接收的参数类型
   file对象
   字符串路径 String
   字节输出流 outputStream
  |--PrintWriter
   构造函数可接收的参数类型
   file对象
   字符串路径 String
   字节输出流 outputStream
   字符输出流 Writer
合并流SequenceInputStream
   SequenceInputStream(Enumeration<? extends InputStream> e)
   SequenceInputStream(InputStream s1, InputStream s2)
就是将多个InputStream合并一起处理。
  Code:
  import java.io.*;
  import java.util.*;
  class SequenceDemo
  {
   public static void main(String[] args)
   Vector<FileInputStream> v = new Vector<FileInputStream>();
   
   v.add(new FileInputStream)("c:/1.txt");
   v.add(new FileInputStream)("c:/2.txt");
   v.add(new FileInputStream)("c:/3.txt");
  
   Enumeration<FileInputStream> en = v.elements();
   sequenceInputStream sis = new SequenceInputStream(en);
   
   FileOutputstream fos = new Fileoutputstream("c:/4.txt");
   
   byte[] buf = new byte[1024];
   int len = 0;
   while((len = sis.read(buf))!=-1)
   {
     fos.write(ouf,0,len);
    }
   fos.close();
   sis.close();
   
   }
 
Split切割流
 Code:
  import java.io.*;
  import java.util.*;
  class SplitFile
  {
    public static void main(String[] args)
    {
      
     }
    public staitc void splitFile()
    {
      FileInputStream fis = new FileInputStream("c:/1.bmp");
      FileOutputStream fos = null;
      byte[] buf = new byte[1024*1024];
      
      int len = 0;
      int count = 1;
      while((len=fis.read(buf))!=-1)
      {
       fos = new FileOutputStream("c:/splitfiles/"+(count++)+".part");
       fos.write(buf,0,len);
       fos.close();
       }
       
     }
   }
操作对象
将堆内存中的对象可以写入流中,然后我们可将其写入物理资源中并在下次使用时读入内存然后重构。
方法:
void writeInt(int val)  写入一个32bit的int
void write(int val)  写入一个int的低8bit。
序列化
序列化接口Serializable是一个标记接口没有定义任何方法。为了让经过我们更改成员状态的类仍然能反序列化在更改之前序列化的对象我们可用手动指定序列标记ANY-ACCESS-MODIFIER,而不让java自动计算:
  static final long serialVersionUID = 42L 
注意,序列化只能序列堆内存中的数据,如果一个对象中定义的static成员则不能被序列进去。
另外如果想将某个类的非静态成员也不序列化则可以在这个成员前面加上 transient即可。
管道流PipedInputStream
管道流跟多线程先关联,如果使用单线程,由于当还没有数据就开始读时容易导致线程因等待而死锁。而多线程时,由于一个线程负责读一个线程负责写,各司其职,就解决了这个问题。
 
RandomAccessFile
既可读还可写,奇怪的东东。它不是IO体系中的子类,而是直接extends自Object。但是他是IO中的成import 员,因为他具备读写功能,内部封装了一个数组,而且通过指针对数组元素进行操作,可以通过getFilePointer获取指针位置,同时可以通过seek改变指针位置。其实完成读写的原理就是内部封装了字节输入输出流。
    通过构造函数可知该类只能操作存在的文件.构造函数中的参数mode:r--只读、rw--读写、rws、rwd。
RandomAccessFile(File file, String mode) 
RandomAccessFile(String name, String mode) 
---------------------- android培训、 java培训、期待与您交流! ---------------------- 详细请查看: http://edu.csdn.net/heima

你可能感兴趣的:(序列化,职场,休闲,管道流,属性表,对象持续化)