JAVA-IO(3)操作简介

Java IO操作主要指的是使用Java进行输入输出操作,Java的所有操作类都早Java.io包中,在使用时需要导入此包.

上两篇博客分别讲解了几个数据流

篇幅一 :
http://blog.csdn.net/haiyang_duan/article/details/76769025
篇幅二:
http://blog.csdn.net/haiyang_duan/article/details/76772196

下面接着简单介绍有关IO的内容.

一. System对IO的支持

这里写图片描述

使用OutputStream想屏幕输出
System.out

         OutputStream out = System.out;
         try{
             out.write("hello".getBytes());
         }catch (IOException e){
             e.printStackTrace;
         }
         try{
             out.close();
         }catch (IOException e){
             e.printStackTrace;
         }

System.err

         String str = "hello";
         try{
             System.out.println(Integer.parseInt(str));
         }catch (IOException e){
             System.err.println(e);
         }  

注意 :
System.out和System.err都是PrintStream的实例化对象,而且通过示例代码可以发现,两者都可以输出错误信息.但是一般来讲System.out是将信息显示给用户看,是正常的信息,而System.err的信息刚好相反,是不希望用户看到的.所以,如果要输出错误信息,最好不要使用System.out,而直接使用System.err.

System.in

        //控制台输入
        InputStream in = System.in;
        System.out.print("请输入内容:");
        byte[] b = new byte[1024];
        int read = in.read(b);
        System.out.println(new String(b,0,read));

上述代码虽然可以实现从键盘中输入数据的功能,但是有以下缺陷:
# 指定了输入数据的长度,使其受到限制;
# 如果byte数组的长度为奇数,有可能出现中文乱码(一个中文为两个字节);

所以应使用标准的输入方式,将输入数据暂放到一个内存中,然后再一次性读取数据,数据只读一次就不会有乱码,而且也不会受长度的限制,如下

        //控制台输入得的标准格式
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = null;
        str = br.readLine();
        System.out.println(str);

二. 输入输出重定向

这里写图片描述

输出重定向
将输出内容指定到某文件

System.setOut(new PrintStream(new FileOutputStresam("C:" + File.separator + "test")));
System.out.println("hello!");

三. BufferedReader类

这里写图片描述

BufferedReader中定义的构造方法只能接收输入流的实例,所以必须使用字符输入流和字节输入流的转换类InputStreamReader将字节输入流System.in变为字符流.

所以就有了键盘输入的标准模式:

        //控制台输入得的标准格式
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = null;
        str = br.readLine();
        System.out.println(str);

四. 数据操作流

在IO中,提供了两个与平台无关的数据操作流:
分别为数据输出流DataOutputStream和数据输入流DataInputStream
通常数据输出流会按照一定的格式将数据输出,在通过数据输入流按照一定的格式将数据读入.

这里写图片描述

这里写图片描述

五. 对象序列化

对象序列化就是把一个对象转变为二进制的一种方法

这里写图片描述

一个类的对象要想被序列化,则对象所在的类必须实现java.io.Serializable接口

定义可序列化的类

class Person implements Serializable{
    private static final long serialVersionUID = 1L;
    private transient String name;
    private int age;
    public Person(String name , int age){
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "姓名:" + name + "--" + "年龄:" + age;
    }
}

序列化

这里写图片描述

        //序列化
        File f = new File("C:" + File.separator + "test");
        OutputStream fos = new FileOutputStream(f);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        Person p = new Person("段海洋", 26);
        oos.writeObject(p);
        oos.close();
        fos.close();

反序列化

这里写图片描述

        File f = new File("C:" + File.separator + "test");
                //反序列化
        InputStream fis = new FileInputStream(f);
        ObjectInputStream ois = new ObjectInputStream(fis);
        Object obj = ois.readObject();
        ois.close();
        fis.close();
        System.out.println(obj);

注意:
一个对象被序列化以后,只有属性被序列化,原因在于,每个对象的方法相同,而属性却不一定相同,也就是说对象保存的只是属性信息.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值