黑马程序猿 IO流 ByteArrayInputStream与ByteArrayOutputStream
---------------------- 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的更多相关文章
- 黑马程序猿——25,打印流,合并流,对象序列化,管道流,RandomAccessFile
------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...
- 黑马程序猿_Java 代理机制学习总结
-------<a href="http://www.itheima.com/"">android培训</a>.<a href=" ...
- 黑马程序猿————Java基础日常笔记---反射与正則表達式
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ...
- 黑马程序猿——15,String,StringBuffer,基本数据类型包装对象
------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...
- 黑马程序猿——JAVA基础——IO流
----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一. 一.IO流的三种分类方式 1.按流的方向分为:输入流和输出流 2.按流的数 ...
- 黑马程序员-IO(二)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 装饰设计模式: 当想要对已有对象进行功能增强时.可以定义类,将已经有的类传入,基于已经有的功能, ...
- 黑马程序员- IO(Input- Output)(一)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- API包: Java.io.* 缘来: java通过操作数据对象是通过流的方式来创建的 作用: ...
- 黑马程序员_JavaIO流(一)
IO(Input Output)流 概述: IO流(数据流)用来处理设备之间的数据传输. Java对数据的操作是通过流的方式. Java用于操作流的对象都在IO包中. 流按操作数据分为两种:字节流与字 ...
- Java之IO(三)ByteArrayInputStream和ByteArrayOutputStream
转载请注明源出处:http://www.cnblogs.com/lighten/p/6972297.html 1.前言 这组输入输出流比较特殊,一般的流指定都是磁盘IO和网络IO,从文件中读取数据或者 ...
随机推荐
- Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界
这篇我要给大家介绍两个知识点: 1. 创建游戏物理世界 2. 没了(小若:我噗) 害怕了?不用操心.这太简单了~! 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www ...
- 用Spring提高java观察者模式灵活性
在上篇博客 用java观察者模式解耦经典三层架构 的最后,用了一个Client类把Listener的实现类注冊到了LoginEventSource类中,假设须要加入�新的逻辑,加入�新的listene ...
- windows下体验Redis
Redis 是一个高性能的key-value数据库, 使用内存作为主存储,数据访问速度非常快,当然它也提供了两种机制支持数据持久化存储.比较遗憾的是,Redis项目不直接支持Windows,Windo ...
- jquery,js常用特效名称
- Java性能漫谈-数组复制之System.arraycopy
当我还年幼的时候,我很任性,复制数组也是,写一个for循环,来回倒腾,后来长大了,就发现了System.arraycopy的好处. 为了测试俩者的区别我写了一个简单赋值int[100000]的程序来对 ...
- First 5 minutes of SQLite
What is SQLite? SQLite is light-weight RDBMS, it is use the file system rather than the C/S client, ...
- javaWeb RSA加密使用
加密算法在各个网站运用很平常,今天整理代码的时候看到了我们项目中运用了RSA加密,就了解了一下. 先简单说一下RSA加密算法原理,RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但 ...
- 13 java 设计模式--单例模式
/** * 单例 */ public class JobSchedulerService { //防止类外部通过new实例化该类 private JobSchedulerService() { } / ...
- 关于(x&y)+((x^y)>>1)的探究
今天在程序员面试宝典上看到 int f(int x int y ) { return (x&y)+((x^y)>>1) } f(729,271) 结果为500 从式子中可以看出分为 ...
- jar打包命令
jar查看jar命令的使用 1. jar cvf 生成jar包的完整名称 要生成的class文件所在目录以及名称 jar -cvf aa.jar *.* 2.将jar包放到环境变量中,可以不用把cla ...