---------------------- 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. [Angular 2] Using ng-for to repeat template elements

    This lesson covers Angular 2’s version of looping through data in your templates: ng-for. It’s conce ...

  2. ncsim仿真VHDL

    ncsim仿真VHDL 1.文件列表 ctrl.vhd design_io.vhd tb.vhd compile.nc simulate.nc ./shm/shmtb.tcl 2. Compile你的 ...

  3. Mysql配置调优(转自阿铭论坛)

    Mysql配置文件my.cnf参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一 ...

  4. 0301——Notification 通知

    注册消息 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(方法) name:@"消息名字&q ...

  5. return 与 finally

    (function hello() { try { return console.log('return'); } catch (e) { } finally { console.log('final ...

  6. C#数组的指定位置复制函数

    1. // 源数组 - 起始位置 -目的数组 - 起始位置 - 长度 System.Array.Copy(mcu_data, 2, read_mcu_data_whole, 0, mcu_data.L ...

  7. 安装laravel

    # 安装laravel 安装composer #安装 curl -sS https://getcomposer.org/installer | php #添加到PATH sudo mv compose ...

  8. lnmp 60秒的服务器缓存时间

    1.问题 php代码写好之后执行发现居然没有生效,打断点,改代码.刷新都没有达到预期的效果.但是间隔60秒之后刷新就看到效果了,或者删除文件就里面见效. 2.原因 从phpinfo()页面输出搜索&q ...

  9. Python一路走来 面向对象1

    面向对象: 类,对象 函数放在类里,叫方法 封装 #如何调用 1. 创建对象, 类名() obj= Foo() 2. 通过对象去执行方法 obj.mail("leon@me.com" ...

  10. 【笔记】Linux 和 Unix 作业控制

    Linux 和 Unix 属于多任务的操作系统,也就是说一个系统在同一时间段内能运行多重任务(进程). 作业控制不只是能够停止/挂起(stop/suspend)正在执行的进程(命令),也可以继续/唤醒 ...