ByteArrayBuffer
(1)输入输出流的两个方法
[1]int read(byte[] b)
包:Java.io.InputStream
功能:将流中字节读取到字节数组b中,第一字节置入数组0位,直到读取到数组b长度的字节位置为止,获取读取的字节长度,如果没有可读字节,返回-1
[2]void write(byte[] b , int off , int len)
包:Java.io.OutputStream
功能:从字节数组b,off位置开始读取,至长度len结束
解释:字节数组实际上起到一个缓冲区的作用,中间的桥
[3]实例
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class MAINTEST {
public static void main(String[] args) throws IOException {
getByteArray();
}
private static void getByteArray() throws IOException {
try(FileInputStream in = new FileInputStream("C:/Users/Nefertari710/Desktop/lin/java小零碎/Test/test.txt");
FileOutputStream out = new FileOutputStream("C:/Users/Nefertari710/Desktop/lin/java小零碎/Test/out.txt");) {
//创建了一个四个自己的数组
byte[] buffer = new byte[4];
//声明了一个长度
int len;
//从in中读将读取的内容存入buffer数组
//只要不等于-1代表buffer里面还是可有存,所以就可以一直读
while ((len = in.read(buffer)) != -1) {
//调用写方法,将字节数组整个写进去
//直接写入整个字节数组会导致因为字节数组保存之前的符号出现错误
out.write(buffer,0,len); //这样写确保了读了几位写几位
}
}
}
}
(2)TransferTo
[1]InputStream类中的方法,支持直接将输入流“转移到”一个输出流,返回总自节长度(java9)
[2]long transferTo(out) throws IOException返回值是总字节长度
[3]底层实现:和之前缓冲区是一样的,相当于封装成现成的了
[4]实例分析
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class MAINTEST {
public static void main(String[] args) throws IOException {
getTransferTo();
}
private static void getTransferTo() throws IOException {
try (FileInputStream is =
new FileInputStream("D:/test/Twinkle Twinkle Little Star.mp4");
FileOutputStream os = new FileOutputStream("D:/test/mov.mp4")) {
is.transferTo(os);
}
}
}
(3)readAllBytes()
[1]InputStream类中的方法,支持直接将流中所有字节读出到字节数组(Java 9)
[2]byte[] readAllBytes() throws IOException
[3]底层实现:一次性读出到字节数组,没有缓冲区,不适合取包含大量数据的输入流
[4]实例分析(必须是纯文本)
import java.io.FileInputStream;
import java.io.IOException;
public class MAINTEST {
public static void main(String[] args) throws IOException {
getStringsInText();
}
private static void getStringsInText() throws IOException {
try (FileInputStream is =
new FileInputStream("D:/test/cn.txt")) {
byte[] bytes = is.readAllBytes();
//看所读的文件是什么形式编码的,引号里就对应什么译码
//默认是utf-8
System.out.println(new String(bytes,"GBK"));
}
}
}
(4)总结:
[1]当读写普通文件(任何二进制文件)时,使用基于字节数组缓冲区的基本输入输出流处理;或基于java9中方法
[2]对应一些特殊情况,例如纯文本,可以使用已经编译好的方法
[3]最基本的缓冲区的输入输出一定要掌握