PrintStream、MD5、ByteArrayInputStream、 ByteArrayOutputStream、16位流介绍

简介:

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

  代码示例:

d4ef48d7c80f734c8450f222cc7ae42f.png


运行结果:

34885cb941a93f3bbabf24b00546943f.png


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

8f5ca86068af6d4b2993c8d7e713b6da.png


运行结果:

ee8fdfd6b1e124cb6c50478ffc7a8e44.png


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

1de3c62cc4d5fc1439d7f2d15f14f560.png


运行结果:

5c4f6ebfddb7bb3a283aa8b8f70a50cd.png

ac2a2d77404a7b2a76f7ddb0ce9c7de9.png




ByteArrayInputStream/ByteArrayOutputStream流:

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

    示意图:

5c0b28f975d4c3093d8b17f26c5de579.png



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

  示意图:

053dde350702ed0c7d7a372e9dcbb277.png


代码示例:

a7999b6ad0fffdc20e1680559c96d974.png


运行结果:

58a1809269c773e1ab00676041eba8ee.png




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

  代码示例:

ca549cb74664f7182d1c00dc4f243122.png


运行结果:

2fd5aa1ab0d82fe3c875d7a2ce1a1982.png



MD5加密:

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

代码示例:

0d210bead67a6383ddb9d89b0e7a2523.png


文本内容:

fddb9480da2f41c379cd3a1d75ddd8f7.png


运行结果:

ed5ea9fe73412b4914e67239d3711f95.png


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

文本内容:

06689dfffbe95740a8658b8254d47996.png


代码示例:

c80fbb27ceead9925635d4ec1d53f780.png


运行结果:

ed7b744a109a9def2cd9feecdb549463.png




因为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位流输出




本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1976627,如需转载请自行联系原作者

相关文章
|
8月前
|
存储 Java
文件IO之 File 类和 InputStream, OutputStream 的用法(一)
文件IO之 File 类和 InputStream, OutputStream 的用法
54 0
|
8月前
|
索引
文件IO之 File 类和 InputStream, OutputStream 的用法(三)
文件IO之 File 类和 InputStream, OutputStream 的用法
63 0
|
8月前
|
Java
文件IO之 File 类和 InputStream, OutputStream 的用法(二)
文件IO之 File 类和 InputStream, OutputStream 的用法
59 0
|
8月前
|
Java
Java IO流--打印流PrintStream和PrintWriter的使用详解
Java IO流--打印流PrintStream和PrintWriter的使用详解
93 0
|
8月前
|
Java
Java IO流之访问文件的字节输入流FileInputStream和字节输入流FileOutputStream的详解
Java IO流之访问文件的字节输入流FileInputStream和字节输入流FileOutputStream的详解
71 0
|
Java 程序员
JAVA:文本文件读写使用Reader/Writer,二进制文件使用InputStream/OutputStream
JAVA:文本文件读写使用Reader/Writer,二进制文件使用InputStream/OutputStream
64 0
|
缓存 Java
Java学习路线-26:字节流与字符流OutputStream/InputStream/Writer/Reader
Java学习路线-26:字节流与字符流OutputStream/InputStream/Writer/Reader
110 0
|
消息中间件 前端开发 JavaScript
InputStream 和 OutputStream 基础
大家好,我是指北君。 PS:最近是跳槽的高峰期,我连日加班好多天,整理出了包含16000 多道面试题的面试宝典,并且指北君也会持续更新这份面试宝典中的题目,希望它能帮助大家找到自己心仪的工作!【文末有领取方式】
InputStream 和 OutputStream 基础
打印输出流PrintStream和PrintWriter(五)上
打印输出流,是做什么用的呢? 是方便将输出信息打印的流,在显示信息的时候,可以让其有格式地进行显示。 一般,打印输出流输出的对象是屏幕, 但也可以是输出流。 打印输出流,根据字节/字符的不同,又可以分为 字节打印输出流 PrintStream 和字符打印输出流 PrintWriter.
223 0
打印输出流PrintStream和PrintWriter(五)上