美文网首页java随笔
URL ---- 类加载器

URL ---- 类加载器

作者: 71150ce14a00 | 来源:发表于2017-07-13 20:40 被阅读2次

    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 );
    

    相关文章

      网友评论

        本文标题:URL ---- 类加载器

        本文链接:https://www.haomeiwen.com/subject/jrsghxtx.html