java_IO

java IO

分类
  1. 字节流:数据流中最小的数据单元是字节 (InputStream,OutputStream)

  2. 字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。 (Reader,Writer)

**文件:**File; RandomAccessFile

字符流和字节流的转换: InputStreamReader和 OutputStreamWriter 门面设计模式,内部使用 StreamEncoder 来实现。

FileWriter:可以简化使用

BufferedWriter bufferedWriter = new BufferedWriter(
//new FileWriter("src/testtxt/writerAndStream.txt"));
new OutputStreamWriter(
	new FileOutputStream(
		new File("src/testtxt/writerAndStream.txt")),"GBK"));
RandomAccessFile

**构造方法:**RandomAccessFile raf = newRandomAccessFile(File file, String mode); 其中参数 mode 的值可选 " r " :可读, " w " :可写, " rw " :可读性;

成员方法: seek(int index);可以将指针移动到某个位置开始读写; setLength(long len);给写入文件预留空间:

**可以读写:**RandomAccessFile不属于InputStream和OutputStream类系的它是一个完全独立的类,所有方 法(绝大多数都只属于它自己)都是自己从头开始规定的,这里面包含读写两种操作

可以一次读取整个文件到内存;

装饰器模式:

应用:1.Java IO;2. Android context

**Component:**抽象构建接口

**ConcreteComponent:**具体的构建对象,实现组件对象接口,通常就是被装饰的原始对象。就对这个对象添加功能。

**Decorator:**所有装饰器的抽象父类,需要定义 一个与组件接口一致的接口,内部持有一个 Component对象,就是持有一个被装饰的对象。

**ConreteDecoratorA/ConreteDecoratorB:**实际 的装饰器对象,实现具体添加功能。熟悉UML图 的基本就明白了,但是像我这样不熟悉的还是 写一点我们熟悉的代码描述吧。

字节流中/字符流

**Component:**OutputStream

**ConcreteComponent:**FileOutputStream,ObjectOutputStream,ByteArrayOutputStream,PipelOutputStream

**Decorator:**FilterOutputStream

**ConreteDecoratorA/ConreteDecoratorB:**BufferOutputStream,DataOutputStream

NIO

FileChannel配合着ByteBuffer,将读写的数据缓存到内存中,然后以批量/缓 存的方式read/write,省去了非批量操作时的重复中间操作,操纵大文件时可 以显著提高效率

apk加固

反编译

apk文件解压,找到dex文件;使用dex2jar工具,生成jar文件;使用jd_gui工具,查看class文件;

解压apk后的结构:多个classes.dex文件,Meta-Inf签名相关的文件夹

加固手段:

**反模拟器:**模拟器运行apk,可 以用模拟器监控到 apk的各种行为,所 以在实际的加固apk 运行中,一旦发现 模拟器在运行该APK, 就停止核心代码的 运行。

代码虚拟化: 代码虚拟化在桌面平台 应用保护中已经是非常 的常见了,主要的思路 是自建一个虚拟执行引 擎,然后把原生的可执 行代码转换成自定义的 指令进行虚拟执行。

加密: 样本的部分可执行代码 是以压缩或者加密的形 式存在的,比如,被保护过的代码被切割成多个小段,前面的一段代码先把后面的代码片段在内存中解密,然后再 去执行解密之后的代码, 如此一块块的迭代执行。

dex文件格式:文件头:checksum;siganature;file_size;索引区:数据区:类的定义;数据区;链接数据区

签名工具:jarSigenr;签名要执行命令

 String cmd[] = {"cmd.exe", "/C ","jarsigner",  "-sigalg", "MD5withRSA",
                "-digestalg", "SHA1",
                "-keystore", "C:/Users/allen/.android/debug.keystore",
                "-storepass", "android",
                "-keypass", "android",
                "-signedjar", signedApk.getAbsolutePath(),
                unsignedApk.getAbsolutePath(),
                "androiddebugkey"};
        Process process = Runtime.getRuntime().exec(cmd);
        System.out.println("start sign");
        try {
            int waitResult = process.waitFor()
            System.out.println("waitResult: " + waitResult);
        } catch (InterruptedException e) {
            e.printStackTrace();
            throw e;
        }

文件zip 操作(解压,压缩)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值