PrintStream流:
  PrintStream流是打印流,PrintStream的对象能够调用打印方法,可以将内容打印到文本里。

  代码示例:

PrintStream、MD5、16位流介绍_MD5


运行结果:

PrintStream、MD5、16位流介绍_PrintStream_02


在参数里的FileOutputStream里可以改为追加模式:

PrintStream、MD5、16位流介绍_MD5_03


运行结果:

PrintStream、MD5、16位流介绍_PrintStream_04


  还可以替换系统的out输出通道,替换后打印的内容就会出现在指定的文本中,控制台则不会有显示:

PrintStream、MD5、16位流介绍_MD5_05


运行结果:

PrintStream、MD5、16位流介绍_MD5_06

PrintStream、MD5、16位流介绍_MD5_07




ByteArrayInputStream/ByteArrayOutputStream流:

ByteArrayInputStream是包装流,相当于可以将一个byte数组转换成InputStream类型的对象。例如在某个情况下,你手里只有一个byte数组,但是你却要调用一个参数为InputStream类型的方法。如果使用笨方法的话,就得先把这个数组使用FileOutputStream流先输出到文本里,再使用FileInputStream流将文本读取出来,然后才将这个FileInputStream的对象传递到那个方法上去,从过程也可以看出这样就是绕了一大圈。

    示意图:

PrintStream、MD5、16位流介绍_PrintStream_08



虽然笨方法是麻烦,但是现在ByteArrayInputStream流的出现已经解决了这个问题,使用这个流就不需要绕这么大一圈了,直接把byte数组交给ByteArrayInputStream流的构造器,然后使用ByteArrayInputStream的对象就可以了,是不是有点像给byte数组披上了一个流的衣服,给数组对象披上这个衣服后就包装成了InputStream类型的对象,所以称之为包装流。

  示意图:

PrintStream、MD5、16位流介绍_MD5_09


代码示例:

PrintStream、MD5、16位流介绍_MD5_10


运行结果:

PrintStream、MD5、16位流介绍_MD5_11




ByteArrayOutputStream是截取流,能够把输出的内容截取存储到数组中。其实这个流就是和包装流反了过来一下,包装流是将一个byte数组转换成InputStream类型的对象,截取流则是把OutputStream类型的对象转换成了byte数组,所以才能实现到截取的效果。

  代码示例:

PrintStream、MD5、16位流介绍_MD5_12


运行结果:

PrintStream、MD5、16位流介绍_MD5_13



MD5加密:

MD5是一种只能加密不能解密的加密算法,这个算法有一个特点:只要是两个文件的字节内容是一致的,加密出来的密匙就是一致的,但是两个文件的字节稍微有一个字节不一样,整个加密出来的密匙就会完全不一样。

代码示例:

PrintStream、MD5、16位流介绍_PrintStream_14


文本内容:

PrintStream、MD5、16位流介绍_PrintStream_15


运行结果:

PrintStream、MD5、16位流介绍_MD5_16


改动一下文件的内容后加密出来的密匙就会完全不一样了:

文本内容:

PrintStream、MD5、16位流介绍_MD5_17


代码示例:

PrintStream、MD5、16位流介绍_MD5_18


运行结果:

PrintStream、MD5、16位流介绍_MD5_19




因为MD5的这种特性,可以用来做秒传和网盘之类的软件,秒传的原理就是判断你所上传的文件内容和服务器里的密匙加密的文件内容是否一致,一致的话就直接不需要上传了,所以就“秒传”了。网盘也是差不多,其实网盘里的文件大家用的都是同一份,你上传的文件只要是服务器里有的就不会再上传了,服务器里只会存储一份文件,所以大家用的文件都是同一份。

需要注意的是:使用MD5算法加密文字内容的时候需要进行嵌套加密,不然是可以被破解的,只有嵌套加密后的文字内容才无法被破解。

 

16位流介绍:

16位流是基于8位流之上发展出来的,又叫文字操作流,是用来处理文字上的事情的,它也就只能处理文字上的事情。

 

16流里的最高抽象类:

Reader:读取

Writer:输出

其实就是和InputStream/OutputStream意思是一样的

 

16流里的主要方法:

FileReader

FileWriter

以上两个方法是文件读取和文件输出流

 

BufferedReader

BufferedWriter

以上两个方法是缓存流,同样的默认缓冲池也是8k

 

 

PrintWriter

打印流,和PrintStream的作用是一样的

 

CharArrayReader

CharArrayWriter

以上两个方法是包装流和截取流,和ByteArrayInputStream/ByteArrayOutputStream流作用是一样的。只不过一个是char数组类型,一个byte数组类型。

 

InputStreamReader

此方法可以使8位流转换成16位输入

 

OutputStreamWriter

此方法可以使16位流转换成8位流输出