JAVA-IO(3)操作简介

来源:互联网 发布:微信轰天雷炸群软件 编辑:程序博客网 时间:2024/06/16 21:05

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);

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

原创粉丝点击