---------------------- 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. Linux RAR 安装和使用详细说明

    描述:Linux默认自带ZIP压缩,最大支持4GB压缩,RAR的压缩比大于4GB.  流程:下载 >安装 > 使用  ----------------------------------- ...

  2. Microsoft Dynamics CRM 2016 增强版的解决方案(CRM新特性,开发者的福利)

    CRM在以前的版本中,如果你改变了一个字段(组织A)然后打算导入到其他组织(组织B),你必须创建一个解决方案,包括完整的实体,并导出导入.然而,如果其他团队成员正在相同的实体做了自定义但不想让这些变化 ...

  3. OC-字典&数组运用实例:通讯录的实现

    需求实现: 一.定义联系⼈类ContactPerson 实例变量:姓名.性别.电话号码.住址.分组名称. 方法:初始化⽅方法(姓名.电话号码).显⽰示联系⼈信息 二.定义AddressBook类, 封 ...

  4. Fragment 点击事件的穿透和重叠bug

    从A fragment跳转到B fragment ,为了返回时不从新加载A fragment内容,通常使用add方法来将a添加到后退栈. 在B Fragment 中点击一个空白区域,如果A Fragm ...

  5. 新闻滚动marquee标签

    先上代码: <marquee behavior="" direction="up" onMouseOver="this.stop()" ...

  6. discuzx3.2伪静态

    首先,我们要新建一个名为.htaccess的文件,文件名为空白,这点很重要.很多人无法新建这个文件,在这里教大家如何新建没有名字的文件. 新建一个TXT文本,名字先默认.然后打开这个文本,然后把我们的 ...

  7. DropDownList绑定数据

    DDLName.DataSource = myRd;DDLName.DataTextField = "name";//要绑定的字段DDLName.DataValueField = ...

  8. String StringBuffer StringBuilder (转)

    转自:http://www.iteye.com/topic/522167 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却 ...

  9. js中的因数分解

    方法一: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...

  10. hadoop之MapReduce WordCount分析

    MapReduce的设计思想 主要的思想是分而治之(divide and conquer),分治算法. 将一个大的问题切分成很多小的问题,然后在集群中的各个节点上执行,这既是Map过程.在Map过程结 ...