IO的初步理解(三)

本篇文章将简单介绍JAVA所提供的转换流   数据流    print流  object流   

1、转换流

转换流的主要作用是将一个文件从字节流转换为字符流,原来是按照一个字节一个字节的读取,在使用转换流之后就变为一个字符一个字符的进行读取。

  public static void main(String[] args) {
    try {
      OutputStreamWriter osw = new OutputStreamWriter(
           new FileOutputStream("d:\\char.txt"));
      osw.write("mircosoftibmsunapplehp");
      System.out.println(osw.getEncoding());
      osw.close();
      osw = new OutputStreamWriter(
      		new FileOutputStream("d:\\char.txt", true),"ISO8859_1"); 
      osw.write("mircosoftibmsunapplehp");
      System.out.println(osw.getEncoding());
      osw.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public static void main(String args[]) {
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
    String s = null;
    try {
      s = br.readLine();
      while(s!=null){
        if(s.equalsIgnoreCase("exit")) break;
        System.out.println(s.toUpperCase());
        s = br.readLine();
      }
      br.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }


2、数据流

数据流是指:DataInputStream和DataOutputStrealu分别继承自InputSteam和OutputStream,它属于处理流,需要分别,"套接"在InputStream和OutputStream类型的节点流上。
DataInputStream和DataOutputStream提供了可以存取与机器无关的Java原始类型数据(如:Int,double等)的方法。可以将JAVA原始的数据类型直接写入到文件当中。

 public static void main(String[] args) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); //自动建立一个字节数组,同时套接上一个DataOutputStream
    DataOutputStream dos = new DataOutputStream(baos);
    try {
      dos.writeDouble(Math.random());//写入一些随机数
      dos.writeBoolean(true);//写入一个布尔类型的true
      ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());//转换为字节数组
      System.out.println(bais.available());//输出有效地可攻读取得所有字节一个布尔类型一个double类型一共占据了9个字节的空间。所以输出9
      DataInputStream dis = new DataInputStream(bais);//在dis外面在套接一层DataInputStream
      System.out.println(dis.readDouble());
      System.out.println(dis.readBoolean());
      dos.close();  dis.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

先在内存当中分配一个字节数组,并在外边套接上3种处理流。并且按照不同的数据类型,将在内存中分配不同的内存空间,并且要遵循先写进的先读出来,比如像写入的是一个int类型的字节,第二次写入double 类型。如果第一次先读double则会读8个字节的内容,会导致读取的混乱。


3、print流

流如其名,print流就是打印东西的一个流,但print流不会抛出异常。

 public static void main(String[] args) {
    String s = null;
    BufferedReader br = new BufferedReader(
                        new InputStreamReader(System.in));//将键盘的标准输入外面套一个处理流
    try {
      FileWriter fw = new FileWriter
                           ("d:\\logfile.log", true); //ture代表追加到文件的后面,作为日志的记录
      PrintWriter log = new PrintWriter(fw);
      while ((s = br.readLine())!=null) {
        if(s.equalsIgnoreCase("exit")) break;
        System.out.println(s.toUpperCase());
        log.println("-----");
        log.println(s.toUpperCase()); 
        log.flush();//情空缓冲区
      }
      log.println("==="+new Date()+"==="); //date代表的是时间
      log.flush();//情空缓冲区
      log.close();//关闭连接
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

这个DEMO的主要的作用是:将键盘中输入的内容进行输出,直到碰到输入到EXIT输入停止。并且将所有输入的操作记录记录到d:\\logfile.log文件当中,并且记录下操作的时间,并记录下来输入的内容。



4、object流

public static void main(String args[]) throws Exception {
		T t = new T();
		t.k = 8;
		FileOutputStream fos = new FileOutputStream("d:/testobjectio.dat");
		ObjectOutputStream oos = new ObjectOutputStream(fos);//用来专门写Object类
		oos.writeObject(t);//将T写进去
		oos.flush();
		oos.close();
		
		FileInputStream fis = new FileInputStream("d:/testobjectio.dat");
		ObjectInputStream ois = new ObjectInputStream(fis);
		T tReaded = (T)ois.readObject();
		System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);
		
	}


class T implements Serializable//可以被序列化的,Serializable属于标记型接口,是一个空接口

{
	int i = 10;
	int j = 9;
	double d = 2.3;
	transient int k = 15;
}
将一个T类型写入到文件中去,可以将一个Object当成一个整体读入进去,并且改变类T中k的值。最后将这个类打印出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值