File与Byte
- 文件一般存在硬盘上——java虚拟机需要借助OS才可以访问(需要关闭)
- 源放在内存中(字节数组)——java虚拟机可以直接访问(由垃圾回收机制gc释放,不需要关闭)
- 文件可以无限加内容,但内存必须要量小一些
ByteArrayInputStream
package com.io.cx2;
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
/**
* 四个步骤:字节数组输入流
* 1、创建源 : 字节数组 不要太大
* 2、选择流
* 3、操作
* 4、释放资源: 可以不用处理
*/
public class test07 {
public static void main(String[] args) {
//1、创建源
byte[] src = "字节数组源".getBytes();
//2、选择流
InputStream is =null;
try {
is =new ByteArrayInputStream(src);
//3、操作 (分段读取)
byte[] flush = new byte[25]; //缓冲容器
int len = -1; //接收长度
while((len=is.read(flush))!=-1) {
//字节数组-->字符串 (解码)
String str = new String(flush,0,len);
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ByteArrayOutputStream
继承有三种情况:
- 父类的方法子类没有,直接延续
- 父类的方法, 子类也有,发生重写——多态用
- 子类独有,发生新增—— 不能发生多态
package com.io.cx2;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 字节数组输出流 ByteArrayOutputStream
*1、创建源 : 内部给大小
ByteArrayOutputStream()直接创建一个新的字节数组输出流(当数据写入缓冲区时,缓冲区会自动增长)
可以使用toByteArray()和toString检索数据
*2、选择流 : 不关联源 new ByteArrayOutputStream();
*3、操作(写出内容)
*4、释放资源 :可以不用
*
* 获取数据: toByteArray()
*/
public class test08 {
public static void main(String[] args) {
//1、创建源——保持四步骤,其实不用创建源
byte[] dest =null;
//2、选择流 (新增方法)
ByteArrayOutputStream baos =null;
try {
baos = new ByteArrayOutputStream();
//3、操作(写出)
String msg ="测试用数据";
byte[] datas =msg.getBytes(); // 字符串-->字节数组(编码)
baos.write(datas,0,datas.length);
baos.flush();
//获取数据
dest = baos.toByteArray();
System.out.println(dest.length +"-->"+new String(dest,0,baos.size()));
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
//4、释放资源
}
}