爪哇(java)复习day21-2021/10/20

1.什么是序列化机制?

序列化:将内存中的java对象转化成与平台无关的二进制流,将其持久化到磁盘中或者将其网络传输到另一个节点

反序列化:序列化的逆过程,将磁盘中的存储的java对象或者网络中传输的java对象转化成内存中的java对象。

2.如何实现序列化

①实现Serializable接口

②设置序列版本号

③属性也是可序列化的

注意细节:

①static、transient修饰的属性不可序列化

②若没有显示的设置序列版本号,系统将默认提供一个。若对属性进行修改等操作,导致默认提供的序列版本号不一致。

public class SerializableTest {
		@Test
		public void test1() throws FileNotFoundException, IOException {
            //使用默认的序列版本号
			Student s1=new Student(1001,"xiaoming");
			ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("hello.txt"));
			oos.writeObject(s1);
			oos.close();
			ObjectInputStream ois=new ObjectInputStream(new FileInputStream("hello.txt"));
			try {
				Student s=(Student)ois.readObject();
				ois.close();
				System.out.println(s);
			} catch (ClassNotFoundException | IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			
		}
}
class Student implements Serializable{
	private int id;
	private String name;
	public Student() {
		super();
	}
	
	public Student(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + "]";
	}
	
}
public class SerializableTest {
		@Test
		public void test1() throws FileNotFoundException, IOException {
            //此时系统提供一个默认的序列版本号
			Student s1=new Student(1001,"xiaoming");
			ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("hello.txt"));
			oos.writeObject(s1);
			oos.close();
//			ObjectInputStream ois=new ObjectInputStream(new FileInputStream("hello.txt"));
//			try {
//				Student s=(Student)ois.readObject();
//				ois.close();
//				System.out.println(s);
//			} catch (ClassNotFoundException | IOException e) {
//				// TODO 自动生成的 catch 块
//				e.printStackTrace();
//			}
			
		}
}
class Student implements Serializable{
	private int id;
	private String name;
//	private String major;
	public Student() {
		super();
	}
	
	public Student(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
//	public Student(int id, String name, String major) {
//		super();
//		this.id = id;
//		this.name = name;
//		this.major = major;
//	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + "]";
	}
	
	
//	public String getMajor() {
//		return major;
//	}
//
//	public void setMajor(String major) {
//		this.major = major;
//	}
//
//	@Override
//	public String toString() {
//		return "Student [id=" + id + ", name=" + name + ", major=" + major + "]";
//	}

	
	
}
public class SerializableTest {
		@Test
		public void test1() throws FileNotFoundException, IOException {
            //此时我去修改Student类,添加了一个属性
//			Student s1=new Student(1001,"xiaoming");
//			ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("hello.txt"));
//			oos.writeObject(s1);
//			oos.close();
			ObjectInputStream ois=new ObjectInputStream(new FileInputStream("hello.txt"));
			try {
				Student s=(Student)ois.readObject();
				ois.close();
				System.out.println(s);
			} catch (ClassNotFoundException | IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			
		}
}
class Student implements Serializable{
	private int id;
	private String name;
	private String major;
	public Student() {
		super();
	}
	
	public Student(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public Student(int id, String name, String major) {
		super();
		this.id = id;
		this.name = name;
		this.major = major;
	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	
	
	
	public String getMajor() {
		return major;
	}

	public void setMajor(String major) {
		this.major = major;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", major=" + major + "]";
	}

	
	
}

爪哇(java)复习day21-2021/10/20

 从结果可以看出:前后两次的序列版本号不一致,所以我们应该设置序列版本号慎用系统默认提供的。

 

public class SerializableTest {
		@Test
		public void test1() throws FileNotFoundException, IOException {
			Student s1=new Student(1001,"xiaoming","software","qinghua");
			ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("hello.txt"));
			oos.writeObject(s1);
			oos.close();
			ObjectInputStream ois=new ObjectInputStream(new FileInputStream("hello.txt"));
			try {
				Student s=(Student)ois.readObject();
				ois.close();
				System.out.println(s);
			} catch (ClassNotFoundException | IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			
		}
}
class Student implements Serializable{
	private static final long serialVersionUID = -6849794456456710L;
	private int id;
	private String name;
	private String major;
	private static String nation="China";
	private transient String shcool="lanjiao";
	public Student() {
		super();
	}
	
	public Student(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public Student(int id, String name, String major) {
		super();
		this.id = id;
		this.name = name;
		this.major = major;
	}
	
	
	
	
	public Student(int id, String name, String major, String shcool) {
		super();
		this.id = id;
		this.name = name;
		this.major = major;
		this.shcool = shcool;
	}

	public static String getNation() {
		return nation;
	}

	public static void setNation(String nation) {
		Student.nation = nation;
	}

	public String getShcool() {
		return shcool;
	}

	public void setShcool(String shcool) {
		this.shcool = shcool;
	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	
	
	
	public String getMajor() {
		return major;
	}

	public void setMajor(String major) {
		this.major = major;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", major=" + major + ", shcool=" + shcool + "]";
	}

	
	
	
}

爪哇(java)复习day21-2021/10/20

 staitc、transient修饰的属性不参与序列化,反序列化则按最新值处理

关于RandomAccessFile类的使用

爪哇(java)复习day21-2021/10/20

mode: ①r:只读  ②rw:读写 

默认从头开始覆盖文件

爪哇(java)复习day21-2021/10/20

 

public class RandomAccessInputStreamTest {
	@Test
	public void test1() throws IOException {
		File file=new File("hello.txt");
		RandomAccessFile ris=new RandomAccessFile(file,"rw");
		ris.write("aaaaaaaa".getBytes());
		ris.close();
	}
}

爪哇(java)复习day21-2021/10/20

 seek(int index):默认从头开始,对内容进行覆盖

爪哇(java)复习day21-2021/10/20

 

@Test
	public void test1() throws IOException {
		// abcdefghijk -> abmmmfghijk
		RandomAccessFile raf=new RandomAccessFile("hello.txt","rw");
		raf.seek(2);
		raf.write("mmm".getBytes());
		raf.close();
	}

爪哇(java)复习day21-2021/10/20

爪哇(java)复习day21-2021/10/20

@Test
	public void test2() throws IOException {
		//使用seek()方法实现一个插入功能
		// abcd -> abmmcd
		RandomAccessFile raf=new RandomAccessFile("hello.txt","rw");
		raf.seek(2);
		byte [] buffer=new byte[(int)new File("hello.txt").length()];
		raf.read(buffer);
		raf.seek(2);
		raf.write("mm".getBytes());
		raf.write(buffer);
		raf.close();
	}

爪哇(java)复习day21-2021/10/20

爪哇(java)复习day21-2021/10/20

爪哇(java)复习day21-2021/10/20  

 TCP网络编程

/*
	 * InetAddress实例化的两个方法:①getByName②getLocalHost
	 */
	@Test
	public void test1() throws UnknownHostException {
		InetAddress address=InetAddress.getByName("127.0.0.1");
		InetAddress address1=InetAddress.getLocalHost();
		System.out.println(address);
		System.out.println(address1);
	}
//客户端
	@Test
	public void Client() throws IOException {
		InetAddress address =InetAddress.getByName("127.0.0.1");
		Socket socket=new Socket(address,9090);
		OutputStream os=socket.getOutputStream();
		os.write("你好美女!可以加个微信吗?".getBytes());
		os.close();
		socket.close();
	}
	//服务端
	@Test
	public void Server() throws IOException {
		ServerSocket ss=new ServerSocket(9090);
		Socket socket=ss.accept();
		InputStream is=socket.getInputStream();
		ByteArrayOutputStream baos=new ByteArrayOutputStream();
		int len;
		byte [] b=new byte [10];
		while((len=is.read(b))!=-1) {
			baos.write(b, 0, len);
		}
		System.out.println(baos.toString());
		baos.close();
		is.close();
		socket.close();
		ss.close();
@Test
	public void Client() throws IOException {
		Socket socket =new Socket(InetAddress.getLocalHost(),9090);
		OutputStream os=socket.getOutputStream();
		BufferedReader br=new BufferedReader(new FileReader("hello.txt"));
		String str;
		while((str=br.readLine())!=null) {
			os.write(str.getBytes());
		}
		System.out.println("发送成功!");
		socket.shutdownOutput();
		InputStream is=socket.getInputStream();
		ByteArrayOutputStream baf=new ByteArrayOutputStream();
		int len;
		byte [] b=new byte [10];
		while((len=is.read(b))!=-1) {
			baf.write(b, 0, len);
		}
		System.out.println(baf.toString());
		
		baf.close();
		is.close();
		os.close();
		br.close();
		socket.close();
	}
	
	@Test
	public void Server() throws IOException, IOException {
		ServerSocket ss=new ServerSocket(9090);
		Socket socket=ss.accept();
		InputStream is=socket.getInputStream();
		OutputStream os=socket.getOutputStream();
		int len;
		byte [] b=new byte[1024];
		while((len=is.read(b))!=-1) {
			String s=new String(b);
			String str=s.toUpperCase();
			System.out.println(str);
			os.write(str.getBytes());
		}
		os.close();
		is.close();
		socket.close();
		ss.close();
	}
	

UDP编程

@Test
	public void sender() throws SocketException, IOException {
		DatagramSocket socket=new DatagramSocket();
		String str="曾经意外,他和她相爱,在没有犹豫的年代";
		byte [] b=str.getBytes();
		DatagramPacket packet =new DatagramPacket(b,0,b.length,InetAddress.getLocalHost(),9090);
		socket.send(packet);
		socket.close();
	}
	
	@Test
	public void receiver() throws IOException {
		DatagramSocket socket=new DatagramSocket(9090);
		byte [] b=new byte [1024];
		DatagramPacket packet=new DatagramPacket(b,0,b.length);
		socket.receive(packet);
		System.out.println(new String(packet.getData()));
		socket.close();
	}

URL编程

@Test
	public void urlTest() throws IOException {
		URL url=new URL("http://localhost:8080/fuqibin/2932.png");
		HttpURLConnection connection=(HttpURLConnection)url.openConnection();
		connection.connect();
		InputStream is=connection.getInputStream();
		BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("932.png"));
		int len;
		byte [] buffer =new byte [1024];
		while((len=is.read(buffer))!=-1) {
			bos.write(buffer, 0, len);
		}
		is.close();
		bos.close();
		connection.disconnect();
	}

上一篇:go学习笔记-day21


下一篇:Java面试题-day21 Mybatis