spark客户端源码阅读学习之启动流程(一)

  • 写在前面:该spark是客户端,是和openfire服务器一起使用的,不是那个spark集群~

  • 对于spark客户端的启动流程和openfire启动流程所涉及的知识没有多大区别,(部分涉及知识请参照 openfire服务器源码阅读学习之启动流程(一))只是新加了unpackArchives(File libDir, boolean printStatus)函数;

  • unpackArchives(File libDir, boolean printStatus)函数解释:将目录中的任何包文件转换为标准JAR文件。各包文件在转换为JAR后将被删除。如果没有找到包文件,此方法不起任何作用。
    代码如下:

      private void unpackArchives(File libDir, boolean printStatus) {
      	//获取一个libDir文件夹下的所有文件,并且根据.pack后缀过滤文件
      	File[] packedFiles = libDir.listFiles( ( dir, name ) -> {
          	return name.endsWith(".pack");
     		 } );
           // 如果找不到文件,则返回,不解压
     		 if (packedFiles == null) {
          	// Do nothing since no .pack files were found
          	return;
      	}
      	//找到文件,解压
      	boolean unpacked = false;
      	for (File packedFile : packedFiles) {
              try {
      	        String jarName = packedFile.getName().substring(0,
      	            packedFile.getName().length() - ".pack".length());
      	        File jarFile = new File(libDir, jarName);
      	          // 删除重复的jar包
      	        if (jarFile.exists()) {
      	            jarFile.delete();
      	        }
    	    //将.pack文件转换为jar文件
          InputStream in = new BufferedInputStream(new FileInputStream(packedFile));
          JarOutputStream out = new JarOutputStream(new BufferedOutputStream(
          	new FileOutputStream(new File(libDir, jarName))));
              Pack200.Unpacker unpacker = Pack200.newUnpacker();
              // 打印解压状态
              if (printStatus) {
                  System.out.print(".");
              }
              // 解压,写入到out里
              unpacker.unpack(in, out);
              in.close();
              out.close();
              //删除压缩文件
              packedFile.delete();
              unpacked = true;
          }
          catch (Exception e) {
              e.printStackTrace();
          }
      }
      	// Print newline if unpacking happened.
      	if (unpacked && printStatus) {
     		     System.out.println();
     		 }
     	}
    

注:pack200:这个是JDK中自带的一个压缩工具,能够对普通的jar文件进行高效压缩。这个压缩工具压缩其他文件和普通压缩工具没有区别,但是压缩jar文件将能轻易达到10%~40%的压缩率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值