---------------------- ASP.Net+Unity开发.Net培训、期待与您交流!

----------------------
package cn.itcast.IO;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class ByteArrayStreamDemo {

/**
* 通过对文件进行加密演示字节缓冲流的作用
* ByteArrayInputStream:
* 须要指定一个缓冲数组。通过read读取缓冲数组
* ByteArrayOutputStream
* 缓冲流中维护了一个byte数组。该数组会随着写入字节而自己主动增大
* 能够通过toByteArray()用一个指定大小的byte数组存放写入的所字节
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File f=new File("E:\\javatest\\1.jpg");
// JiaMi(f);
JieMi(f);
}
public static void JiaMi(File f) throws Exception
{
int b=-1;
FileInputStream fis=new FileInputStream(f);
int len=(int)f.length();
byte []buf=new byte[len];
fis.read(buf);
//把原文件加密,就是加密的文件替换了原文件
fis.close();
//当流关联文件,文件是无法删除的
f.delete();
//此处使用ByteArrayInputStream仅仅是为了演示。现实中就不要这么用
//直接用FileInputStream的read就能完毕。

ByteArrayInputStream bais=new ByteArrayInputStream(buf);
FileOutputStream fos=new FileOutputStream(f);
while((b=bais.read())!=-1)
{
//进行异或运算
fos.write(((byte)b)^0xff);
}
bais.close();
fos.close();
}
public static void JieMi(File f) throws Exception
{
int b=-1;
FileInputStream fis=new FileInputStream(f);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
//把原文件进行解密之后存进字节缓冲流中
while((b=fis.read())!=-1)
{
baos.write(((byte)b)^0xff);
}
//返回缓冲流中全部字节的副本,也就是创建了新的字节数组,并返回
byte []buf=baos.toByteArray();
fis.close();
f.delete();
FileOutputStream fos=new FileOutputStream(f);
fos.write(buf);
baos.close();
fos.close();
}
/*解密就是加密的逆过程,程序中是用异或运算类改变文件的二进制表示
观察发现使用ByteArrayOutputStream让代码变得简洁。而ByteArrayInputStream反而多此一举
可能这个需求不能非常好的表现出字节输入缓冲流的长处
*/
}
----------------------
ASP.Net+Unity开发.Net培训、期待与您交流。 ----------------------

黑马程序猿 IO流 ByteArrayInputStream与ByteArrayOutputStream的更多相关文章

  1. 黑马程序猿——25,打印流,合并流,对象序列化,管道流,RandomAccessFile

    ------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...

  2. 黑马程序猿_Java 代理机制学习总结

    -------<a href="http://www.itheima.com/"">android培训</a>.<a href=" ...

  3. 黑马程序猿————Java基础日常笔记---反射与正則表達式

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ...

  4. 黑马程序猿——15,String,StringBuffer,基本数据类型包装对象

    ------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...

  5. 黑马程序猿——JAVA基础——IO流

    ----------android培训.java培训.java学习型技术博客.期待与您交流!------------  一. 一.IO流的三种分类方式 1.按流的方向分为:输入流和输出流 2.按流的数 ...

  6. 黑马程序员-IO(二)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 装饰设计模式: 当想要对已有对象进行功能增强时.可以定义类,将已经有的类传入,基于已经有的功能, ...

  7. 黑马程序员- IO(Input- Output)(一)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- API包: Java.io.* 缘来: java通过操作数据对象是通过流的方式来创建的 作用: ...

  8. 黑马程序员_JavaIO流(一)

    IO(Input Output)流 概述: IO流(数据流)用来处理设备之间的数据传输. Java对数据的操作是通过流的方式. Java用于操作流的对象都在IO包中. 流按操作数据分为两种:字节流与字 ...

  9. Java之IO(三)ByteArrayInputStream和ByteArrayOutputStream

    转载请注明源出处:http://www.cnblogs.com/lighten/p/6972297.html 1.前言 这组输入输出流比较特殊,一般的流指定都是磁盘IO和网络IO,从文件中读取数据或者 ...

随机推荐

  1. HDU 3622 Bomb Game(2-sat)

    HDU 3622 Bomb Game 题目链接 题意:求一个最大半径,使得每一个二元组的点任选一个,能够得到全部圆两两不相交 思路:显然的二分半径,然后2-sat去判定就可以 代码: #include ...

  2. WAS集群系列(6):集群搭建:步骤4:安装WAS升级软件

    逐步点击"下一步",注意一处流程,例如以下列举: "升级软件"安装的路径设置,建议与之前的WAS及IHS安装的绝对路径同样,例如以下所看到的: 逐步点击,完毕安 ...

  3. MDM 证书申请流程(vendor及customer)

    整个流程分为两部分:vendor,customer. 一.Vendor 1.成为一个 MDM Vendor 1) 首先你须要拥有一个 Apple Enterprise account($299/年). ...

  4. NVL函数(NVL,NVL2,NULLIF,COALESCE)

    NVL 语法:NVL( expr1, expr2) 功能:如果expr1为NULL,则NVL函数返回expr2的值,否则返回expr1的值,如果两个参数的都为NULL ,则返回NULL. 注意事项:e ...

  5. js_day8

  6. <经验杂谈>C#/.Net字符串操作方法小结

    字符串操作是C#中最基本的.最常见的.也是用的最多的,以下我总结 了几种常见的方法 1.把字符串按照分隔符转换成 List /// <summary> /// 把字符串按照分隔符转换成 L ...

  7. hashtable 和dictionary

    hashtable 通过 key 和value 进行访问 不是 通过 索引访问 对类型没有强制规定 ,所以类型危险 容易出错 无效的key时 会返回空 dictionary 与hashtable 相区 ...

  8. Android学习之Activity之间的数据传递

    Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下. (一).一个Activity启动另一个Activity并将数据传递到这个Activity当中 思 ...

  9. oc随笔二:组合、继承

    在oc中如果没有使用ARC的话,手动管理内存一定要注意处理好“野指针”,通常我们在释放指针的指向的地址时,都要将指针赋值为nil,这样能有效的防止野指针.常用的关键字:retain.assign .s ...

  10. Struts2+Spring3+Hibernate3+Maven构建(基于Eclipse)

    长时间不做后台了,整理一下资料,以便翻阅. Eclipse.JDK安装略…… Maven下载地址:http://maven.apache.org/download.cgi 版本比较新的Eclipse基 ...