字节数组 字节节点流
输入流:ByteArrayInputStream read(byte[], int off, int len) 可以不用close()方法,
一般使用字节数组流操作其他计算机、服务器中的数据,不使用后内存会自动释放,不需要手动释放,在这里加close()会加入
一个空的方法,不执行操作,也不会报错
输出流:ByteArrayOutputStream write(byte[], int off, int len) + toByteArray()
与文件数据操作的区别:输出的对象为字节数组,因此有一个新方法toByteArray(),不可以使用多态方法
字节数组流的操作
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* 字节数组流
* 字符数组大小有限,操作的文件不能过大
* @author Administrator
*
*/
public class ByteArrayStream {
public static void main(String[] args) throws IOException {
read(write());
}
/**
* 字节数组输入节点流
* 操作与文件字节流输入一致
* @throws IOException
*/
public static void read(byte[] bStr) throws IOException{
//数据源
// String msg = new String("操作与文件字节流输入一致");
// byte[] bStr = msg.getBytes();//转换为字节数组
//选择流
InputStream is = new BufferedInputStream(
new ByteArrayInputStream(
bStr
)
);
//操作
byte[] flush = new byte[1024];
int len = 0;
while(-1!=(len=is.read(flush))){
String str = new String(flush, 0, len);
System.out.println(str);
}
}
/**
* 输出流
* 操作与文件输出流有些区别
* 输出的对象为字节数组,因此有一个新方法toByteArray()
* 不可以使用多态方法
*/
public static byte[] write(){
//目的地
byte[] dest;
//选择流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
//操作
String msg = "操作与文件字节流输入一致";
byte[] info = msg.getBytes();
bos.write(info, 0, info.length);
//获取数据
dest = bos.toByteArray();
return dest;
}
}
字节数组流与文件输入输出流的结合
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 字节数组流与文件操作的字节流结合
* 文件--(字节输入流)-->程序--(字节数组输出流)-->字节数组;
* 字节数组--(字节数组输入流)-->程序--(字节输出流)-->文件;
* @author Administrator
*
*/
public class ByteArray_File_Stream {
public static void main(String[] args) throws IOException {
byte[] data = getByteFromFile("D:/CER/img/Out.txt");
toFileFromByteArray(data, "D:/CER/img/Out1.txt");
System.out.println(new String(data));
}
/**
* 文件--(字节输入流)-->程序--(字节数组输出流)-->字节数组
* @return
* @throws IOException
*/
public static byte[] getByteFromFile(String srcPath) throws IOException{
//文件源
File src = new File(srcPath);
//字节数组目的地
byte[] dest = null;
//选择流
InputStream is = new BufferedInputStream(new FileInputStream(src));//字节输入流
ByteArrayOutputStream bos = new ByteArrayOutputStream();//字节数组输出流
//操作
byte[] flush = new byte[1024];//不断读取
int len = 0;
while(-1!=(len=is.read(flush))){
//写入到字节数组输出流
bos.write(flush, 0, len);
}
bos.flush();
//获取数据
dest = bos.toByteArray();
bos.close();
is.close();
return dest;
}
/**
* 字节数组--(字节数组输入流)-->程序--(字节输出流)-->文件
* @param src 字节数组源
* @param dest 文件地址
* @throws IOException
*/
public static void toFileFromByteArray(byte[] src,String destPath) throws IOException{
//源 src 目的地 dest
File dest = new File(destPath);
//选择流
InputStream is =new BufferedInputStream(new ByteArrayInputStream(src));//字节数组输入流
OutputStream os =new BufferedOutputStream(new FileOutputStream(dest));//字节输出流
//操作
int len = 0;
byte[] flush = new byte[1024];
while(-1!=(len=is.read(flush))){
//写出到文件中
os.write(flush, 0, len);
}
os.flush();
os.close();
is.close();
}
}