本次项目主要依靠java基础和javafx进行界面设计完成
功能点实现:
存在的问题:
1.对java基础的掌握非常薄弱,对于面向对象等在项目中需要经常使用的都只有模糊的概念,导致在写项目的过程中只能反复的去看
2.项目的结构和风格非常不好,最开始写的时候甚至都没有将客户端和服务端进行分离,登陆注册写完之后才进行修改,各个类中多次使用了public static 类型 变量名的形式在不同的类之间进行传递,get和set方法使用的较少,甚至在最开始的时候还在前端直接使用mysql语句进行数据库操作
3.在完成功能点的同时没有考虑到使用时的体验感,最开始想做一个新版QQ,实现上遇到困难之后改作老版QQ,一个普通的聊天室做出了接近两位数的界面,用起来也十分不方便
4.对于整个项目的流程和业务把控不清晰,不知道应该怎么写,流程十分乱套
5.创新功能点的缺少,在实现绝大部分功能点后没有进行一些拓展,限制了自己的思维 ,没有一些新东西的体现
做:
1.再用一周的时间完成一个创新功能点
2.对自己的项目进行一下复盘和改进
3.继续去学习java基础
使用的是序列化后的字节流进行传输
Java序列化就是指把Java对象转换为字节序列的过程
Java反序列化就是指把字节序列恢复为Java对象的过程。
序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。
反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。
总结:核心作用就是对象状态的保存和重建。(整个过程核心点就是字节流中所保存的对象状态及描述信息)
序列化优点:
①将对象转为字节流存储到硬盘上,当JVM停机的话,字节流还会在硬盘上默默等待,等待下一次JVM的启动,把序列化的对象,通过反序列化为原来的对象,并且序列化的二进制序列能够减少存储空间(永久性保存对象)。
②序列化成字节流形式的对象可以进行网络传输(二进制形式),方便了网络传输。
③通过序列化可以在进程间传递对象。
序列化算法需要做的事:
① 将对象实例相关的类元数据输出。
② 递归地输出类的超类描述直到不再有超类。
③ 类元数据输出完毕后,从最顶端的超类开始输出对象实例的实际数据值。
④ 从上至下递归输出实例的数据。
示例:(登录请求发送)
//创建输出流
String Operation = MarkTool.registertip;
//序列化,并传输提示词和user对象
Talk.Connection.oos.writeObject(Operation);
Talk.Connection.oos.writeObject(u);
public class SerializableTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//序列化
FileOutputStream fos = new FileOutputStream("object.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Student student1 = new Student("lihao", "wjwlh", "21");
oos.writeObject(student1);
oos.flush();
oos.close();
//反序列化
FileInputStream fis = new FileInputStream("object.out");
ObjectInputStream ois = new ObjectInputStream(fis);
Student student2 = (Student) ois.readObject();
System.out.println(student2.getUserName()+ " " +
student2.getPassword() + " " + student2.getYear());
}
}