一、判断奇偶

×

public boolean isOdd(int i) {
    if (i % 2 == 1) {
        System.out.println("是奇数");
    } else {
        System.out.println("是偶数");
    }
}

public boolean isOdd(int i) {
    return (i & 1) == 1;
}

二、序列化

2.1 什么是序列化

术语解释

  1. 序列化:把对象转换为字节序列的过程称为对象的序列化。
  2. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
    通俗解释
    在代码运行的时候,我们可以看到很多的对象及对象数据,让一些对象及数据持久的保存起来就叫序列化。

2.2 为啥要序列化

  1. 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候
  2. 当你想用套接字在网络上传送对象的时候
  3. 当你想通过RMI传输对象的时候

2.3 如何序列化

实现Serializable接口即可
pojo

package com.lxk.model;

import java.io.Serializable;

/**
 * @author lxk on 2017/11/1
 */
public class FlyPig implements Serializable {
    //private static final long serialVersionUID = 1L;
	//静态static的属性不序列化,只保存默认值
    private static String AGE = "269";
    private String name;
    private String color;
	//transient 修饰的属性,是不会被序列化的
    transient private String car;

    //private String addTip;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getCar() {
        return car;
    }

    public void setCar(String car) {
        this.car = car;
    }

    //public String getAddTip() {
    //    return addTip;
    //}
    //
    //public void setAddTip(String addTip) {
    //    this.addTip = addTip;
    //}

    @Override
    public String toString() {
        return "FlyPig{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                ", car='" + car + '\'' +
                ", AGE='" + AGE + '\'' +
                //", addTip='" + addTip + '\'' +
                '}';
    }
}

main

package com.lxk.test;

import com.lxk.model.FlyPig;

import java.io.*;

/**
 * 序列化测试
 *
 * @author lxk on 2017/11/1
 */
public class SerializableTest {
    public static void main(String[] args) throws Exception {
        serializeFlyPig();
        FlyPig flyPig = deserializeFlyPig();
        System.out.println(flyPig.toString());

    }

    /**
     * 序列化
     */
    private static void serializeFlyPig() throws IOException {
        FlyPig flyPig = new FlyPig();
        flyPig.setColor("black");
        flyPig.setName("naruto");
        flyPig.setCar("0000");
        // ObjectOutputStream 对象输出流,将 flyPig 对象存储到E盘的 flyPig.txt 文件中,完成对 flyPig 对象的序列化操作
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("d:/flyPig.txt")));
        oos.writeObject(flyPig);
        System.out.println("FlyPig 对象序列化成功!");
        oos.close();
    }

    /**
     * 反序列化
     */
    private static FlyPig deserializeFlyPig() throws Exception {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("d:/flyPig.txt")));
        FlyPig person = (FlyPig) ois.readObject();
        System.out.println("FlyPig 对象反序列化成功!");
        return person;
    }
}

2.4 serialVersionUID有什么用

  1. 在实现这个Serializable 接口的时候,一定要给这个 serialVersionUID 赋值,否则java会自动生成serialVersionUID。
  2. serialVersionUID 是用来标识类的语义,如果类进行了修改,则java默认生成的serialVersionUID也会改变。
  3. serialVersionUID不同的类无法反序列化,一个版本升级旧数据就不兼容了,所以一般将其值设为1L。

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议