---------------------- 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. ibatis使用--SqlMapClient对象

    SqlMapClient对象 这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作.这个类是我们使用iBATIS的最主要的类.它是线程安全的.通常,将它定义为单例. ...

  2. samba常用命令

    1.# smbstatusSamba version 3.6.23PID Username Group Machine ---------------------------------------- ...

  3. WndPric的使用方法

    protected override void WndProc(ref Message m) { const int WM_SYSCOMMAND = 0x0112; const int SC_CLOS ...

  4. Android Studio tips and tricks 翻译学习

    Android Studio tips and tricks 翻译 这里是原文的链接. 正文: 如果你对Android Studio和IntelliJ不熟悉,本页提供了一些建议,让你可以从最常见的任务 ...

  5. hdu 油菜花王国

    Problem Description 程序设计竞赛即将到来,作为学校ACM集训队主力,小明训练一直很努力.今天天气不错,教练也心情大好,破例给各位队员放假一天,小明就骑着自己的小电驴到郊外踏青去了. ...

  6. sqlite的事务

    好久没用数据库,知识都忘了,之前用sqlite 逐行insert数据,发现这性能实在是太坑,10w条数据,插入大约花了100来分钟. 后来发现还有事务这么一个东西,可以大幅度降低对io的操作,测试插入 ...

  7. window.open() | close()方法

    Window对象的open()方法可以打开一个新的浏览器窗口(或标签页),window.open()载入指定的URL到新的或已存在的窗口中,返回代表那个窗口的window对象,它有4个可选的参数 1. ...

  8. MrHuo.OAuthLoginLibs社会化登录组件Github

    今日写的博客 [原创]旧事重提:只配置参数实现OAuth2登录 引来很多园子里的朋友问候,所以今日花了一些时间整理了代码. 现已发布至github: MrHuo.OAuthLoginLibs:http ...

  9. Creating a settings table that can handle almost any type of value

    Update: Updated article here. Today I wanted to be able to have a table store any type of value as a ...

  10. Django-Rest-Framework 教程: 快速入门

    本篇中, 我们会创建一个简单的API, 用来查看和编辑django默认的user和group数据. 1. 设置 我们创建django项目tutorial, 和app quickstart: # 创建新 ...