Java I/O 流 4

打印流

PrintStream和PrintWriter都属于输出流,分别针对字节和字符

PrintWriter 和PrintStream都提供了重载的println方法用于输出多类型数据

print(Object):void

        输出引用类型,实际上是调用对象的同toString方法转换为String进行输出

public void println(Object x) {
    String s = String.valueOf(x); //调用String类中的静态方法将object类型的
//数据转换为字符串
        synchronized (this) {
            print(s);
            newLine(); //print('\n')
        }
}
    //String中的valueOf方法的定义
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString(); //如果输出对象非空,则
            //调用对象的toString方法
}

println表示输出后自动换行

        PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息         PrintWriter和PrintStream有自动的flush功能 textOut.flushBuffer();

PrintWriter(Writer)

PrintWriter(Writer out, boolean autoFlush)自动刷新----println        

PrintWriter(OutputStream out) //参数是一个字节流,但是不需要通过桥接处理
PrintWriter(OutputStream out, boolean autoFlush)
PrintStream(OutputStream)
PrintStream(OutputStream out, boolean autoFlush

对象流

        使用DataInputStream或者DataOutputStream 可以读写对象数据,但是操作比较繁琐;

int id=dis.readInt(); //用户id--用户标识
int len=dis.readInt(); //用户名称的字符数
StringBuilder username=new StringBuilder(); //用户名称
for(int i=0;i<len;i++) //一次读取一个字符,然后拼接成完整的字符串
    username.append(dis.readChar());
    len=dis.readInt();
    StringBuilder password=new StringBuilder(); //用户口令
for(int i=0;i<len;i++)
    password.append(dis.readChar());
    double balance=dis.readDouble(); //用户余额
if(dis==id){
    res=new Account(); //Account是一个自定义类型,用于封装账户信息
    res.setUsername(username.toString());
    res.setPassword(password.toString());
    res.setBalance(balance);
    break;
}

SUN提供了ObjectlnputStream/ObjectOutputStream可以直接将Object写入或读出这里实际上还有针对8种简单类型及其包装类的操作方法,以及针对String 类型的操作方法

        readObject():Object

        writeObject(Object):void

Date now=new Date();
    ObjectOutputStream oos=new ObjectOutputStream(
        new BufferedOutputStream(new FileOutputStream("data3.txt")));
        oos.writeObject(now);
        oos.close();
    ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream("data3.txt")));
    Object obj=ois.readObject();
    if(obj!=null && obj instanceof Date) {
    Date dd=(Date)obj;
    System.out.println(dd);
}
    ois.close();

读写一个对象的前提是这个类型的对象是可以被序列化的;

        NotserializableException;

对象序列化【简单来说就是对象可以直接转换为二进制数据流】/对象的反序列【可以将二进制数据流转换为对象】,这一般依靠Jvm实现,编程中只做声明对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象。对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,,从 而允许把这种二进制流持久地保存在磁盘上,通过网络将这种二进制流传输到另一个网络节点,其他程 //从文件中按照id值查找对应的对象

如何声明对象所属于的类可以进行序列化和反序列化Serializable/Externalizable接口 其中的接口没有任何定义,仅仅只起到了说明的作用,这种接口叫做标志接口或者旗标接口

可以通过ObjectInputStream【readObject():Object】和 ObjectOutputStream【writeObject(Object):void】提供的方法直接操作对象

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值