第二十八天
TCP细节
客户端的一个文本文件,服务器端进行复制到指定的某个文件中 ,复制完毕了,服务器端需要给客户端反馈!(反馈的消息,客户端能不能获取到)
加入反馈操作:出现客户端和服务器端互相等待的情况—>但是文件已经复制完毕!
针对服务器端:不知道客户端是否还需要从通道内的输出流对象中写入数据(此时文件读写复制结束条件:只是null)
文件读完毕的条件是null,但是TCP通过流的方式 要进行结束; 服务器端不知道客户端是否还需要写入数据,客户端等待着服务器反馈的数据!
解决方案:
1)自定义结束条件
在客户端读完文件中,通知一下服务器端
写入一行内容(“886/over”),服务器端只要读取到886或者over
2)可以使用客户端Socket的一个方法 标记(通知服务器端,客户端已经没有数据输出了)
public void shutdownOutput()
throws IOException
反射
获取当前类的字节码文件对象Class,通过它就可以获取当前类的构造方法并且创建当前类的实例,获取当前类的成员变量并去赋值.
public class ReflectDemo3 {
public static void main(String[] args) throws Exception {
//获取Person类的字节码文件对象
Class clazz = Class.forName("com.qf.reflect_03.Person");
//获取构造器对象
//public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
Constructor con = clazz.getDeclaredConstructor(String.class,int.class,String.class) ;
//取消Java语言访问检查
con.setAccessible(true);
//通过构造器对象创建当前类实例
Object obj = con.newInstance("高圆圆", 20, "西安市");
System.out.println(obj);//Person{name='高圆圆', age=20, address='西安市'}
}
}
注解annotation
注解可以被解析,是一种标记,通过这种标记可以被程序所解析,注解的本质上就是一个接口.
jdk内置注解以及元注解,
Mysql基本语法
Mysql:存储数据的数据库.
创建库
create database 数据库名;
创建表
create table 表名(表字段名1,表字段名2,.....表字段名n);
修改库的字符集
alter database 数据库名 character set utf8mb4;
修改表
alter table 表名 修改选项