第二十一天:网络编程

Properties 属性文件
Property 属性


其实它就是一个文本文件,我们可以用流一行一行的读取然后截取字符串。但是比较
麻烦,所以java有一个特定的类,其实它就是 
//Properties 是一个Map集合,相当于Map<String, String>


 //Properties 是一个Map集合,相当于Map<String, String>
/* load(InputStream inStream) 
        从输入流中读取属性列表(键和元素对)。*/
properties.load(new FileInputStream("src/day21/config.properties"));






load() 解析 *.properties -> Properties 对象


save() 保存 Properties 对象 -> *.properties
store() 


list() 在指定流上输出全部的属性信息


getProperty(String key) 获取指定属性


setProperty(key, value) 修改指定属性


网络编程
  服务(Service), 如: 食堂, 商店 Host
//  食堂, 商店一定是一直开着等着我去买东西,即使我不去,它也要一直开着。
  WEB 
  Client -> Service
  1 TCP 编程
   食堂卖饭                             服务器
     A 食堂有地址                       A IP地址(域名)
     B 每个食堂,有提供不同服务类型窗口     B 不同的端口(ServerSocket) 65535, 
     C 每个窗口可以为多个同学服务       C 每个端口可以建立多个Socket实例, 
     每个实例代表一个对客户的服务
     
    学生买饭的过程                       客户端连接
     A 找到一个食堂                A 使用域名(IP)找到指定的服务器
     B 找到一个窗口                B 使用服务器的端口号找到服务端口
     C 请求指定服务                C 建立Socket 对象. 
     D 有窗体提供对应的反馈        D 使用流与服务器通信.
    
必须先启动服务器端,然后再启动客户端。


过程:客户端由计算机系统任意取一个端口号去访问IP的8900的指定端口,连接完成以后
客户和服务器端各会产生一个socket对象,并且会有一对输入输出流,
客户端的输入是服务器的输出,客户端的输出是服务器的输入,(所以有有个客户访问会产生4个流)
在建立完成以后,把服务器端口的一个具体连接实例派发成一个线程。
如果再一个客户端去连接这个端口,与上面的那个是一样的。


//客户端应该写两个线程,一个监听输入流,一个监听输出流。


getBytes():
使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中


getBytes(Charset charset)
使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。 


网络编程实例: 
   简单的 FTP 协议实现(?, ls, get)
   A 服务器请求是文本行请求
   B 服务器响应包含两个部分: 第一行是服务器响应头, 头有两种: 
     1 text,num 是文本响应结果, num是响应中包含的文本行数.
     2 file,size,filename 是文件数据响应结果, size是响应流中文件的长度.


反射 (自省) 是自我管理的机制
java 代码管理Java的类和方法等


数据库就是表管理表的问题。
java中有一个类管理类。


名词->类


名词: 类, 方法, 属性, 构造器
Class: Class, Method, Field, Constructor 


//所以java中有一个类就叫类,有一个方法就叫方法类,属性就叫属性类,构造器就叫构造器类。


任何类都是Class的具体实例.
类加载到内存中的结果是Class的实例, 是一个对象.
类可以作为对象管理.


//Student这个类就是Class的一个实例,肯定可以对一内存中的一个实例进行管理 。


Student s = new Student();
Class cls = Student.class;
Student.class


1 Class实例的获得方式
  A Java类只按需加载一次,任何一种方式获得的class的实例都是同一个。
  B 3 种方法: 1 类的.class属性
           2 对象的getClass() 方法
           3 Class类的静态寻找方法: Class.forName();
     ClassDemo.java三种加载类的方法。
           
  class Foo{
static{
//这句话在加载时间执行,也就是说,静态的方法都是在加载期间调用 的。无论使用几次,它只加载一次。
System.out.println("load foo!");
//它永远只执行一次。
}




//得到的是全部的公有方法。包括父类 的。
Method[] methods = cls.getMethods();
//表示此类所有声明方法的 Method 对象的数组 ,不包括父类的。
Method[] methods2 = cls.getDeclaredMethods();

在运行期间运行想运行的类的想用的方法。



2 Class实例的用途


反射应用:
  简单的测试框架实现

你可能感兴趣的:(第二十一天:网络编程)