URL u = new URL("http://127.0.0.1:8080/home/indext?name=aaa&pwd=123");
u.getProtocol();获取协议 http
u.getHost();获取ip 127.0.0.1
u.getPort(); 获取端口 8080
u.getDefaultPort(); 获取默认端口 80
u.getPath(); 获取路径 /home/indext
u.getQuery(); name=aaa&age=123
下载图片:
方法1
URLConnection c = u.openConnection();链接方法
c.getInputStream(); 返回从链接读取输入流
方法2: 常用方法
u.openStream(); 读取链接内容
例如:
URL url = new URL("http://127.0.0.1:8080/hello/1.jpg");
InputStream input = url.openStream();
FileOutputStream out = new FileOutputStream("F:\\aaa\\美女.jpg" );
byte[] b = new byte[1024*10];
int len = 0;
while((len =input .read(b ))!=-1){
out.write( b, 0, len);
}
out.close();
上传:
Socket ServerSocket
// 客户端上传
Socket socket = new Socket("127.0.0.1" , 10086);
OutputStream out = socket .getOutputStream();
// 服务端接收
ServerSocket ss = new ServerSocket(10086);
Socket s = ss.accept();
InputStream input = s .getInputStream();
CS架构: Client Server 客户端服务端架构
要求: 有两套代码,客户端,服务端
缺点:维护性成本高
优点: 可以帮服务端减小压力
BS架构: Browser Server 浏览器 服务端
要求:只需要服务端即可,而浏览器作为客户端
优点: 维护性号,成本低
缺点: 服务器压力大
jvm运行机制:
1.java文件编译为.class 文件到bin目录
2.编译后的文件是在硬盘上的,那么我们运行时需在内存中看到效果,通过jvm类加载器ClassLoader把硬盘中的class文件加载到内存中,被夹在到内存中的class文件会变成一个Class对象
jvm 调用类加载器
类加载器: ClassLoader
1.Bootstrap 根类加载器 JRE/lib/rt.jar 加载API所有的类
2.ExtClassLoader 扩展类加载器 JRE/lib/ext/*.jar jdk使用的
3.AppClassLoader 应用加载器 ClassPath配置.class 文件路径,也就是bin目录下的所有class,eclipse中classpath是workspace中的bin目录
获取类加载器:
Class clazz = 类名.class;
ClassLoader l = clazz.getClassLoader(); AppClassLoader
ClassLoader parent = l.getParent(); ExtClassLoader
ClassLoader gradP = parent.getParent(); null 因为Bootstrap不属于java中的一个类,他是使用c++实现的
AppClassLoader 类加载器被父类ExtClassLoader加载,ExtClassLoader被Bootstrap加载
<h6>方法区保证只有一个.class文件: 全盘负责委托机制</h6>
全盘负责:当一个ClassLoader(加载器)加载一个类的时候,那么在这个类中所引用的所有其他类通常也都有这个类加载器加载
委托机制:,先让parent类加载器寻找,只有在Parent找不到的时候,才从自己的范围查找
Cache 缓存机制:如果这个类中已经用过这个类了,放在cache缓存中,下次用的时候就不用加载了
任何一个类,只会被加载一次
用类加载器加载配置文件:
把配置文件放在src中,会自动拷贝一份在bin目录中, bin目录相当于classpath
用类加载器加载配置文件:
把配置文件放在src中,会自动拷贝一份在bin目录中, bin目录相当于classpath
ClassLoader loader = 类名.class.getClassLoader();
InputStream is =loader.getResourceAsStream(name); 返回读取指定资源输入流
name:表示当前要加载的配置文件名,而这里的相对路径是classpath就是bin目录
Properties p = new Properties();
p.load(is);
ClassLoader loader = URLDemo. class.getClassLoader();
InputStream s = loader.getResourceAsStream( "loader.ini");
Properties p = new Properties();
p.load( s);
String name = p.getProperty( "username");
String pwd = p.getProperty( "pwd");
System. out.println(name +"----------" +pwd );
网友评论