javase:IO字节流
输入/出字节流
输入输出字节流:(InputStream,OutputStream)
字节流根类都是抽象类
API
①Int read();从流中读取一个字节,返回值为int类型,读取数据占低八位,高24为0,进行无符号扩展
②void write(int b)把一个字节写入到流中(把int类型的低八位)
③void close()关闭管道流
文件输入/出字节流
文件流
①FileInputStream 文件输入流
②FileOutputStream文件输出流
特点
文件流是节点流,直接可以操作磁盘的文件
节点流概念
能够介质(文件、网络、控制台)直接相连的流
ByteArray字节流
byte字节流
①ByteArrayInputStream比特数组输入流
②ByteArrayOutPutStream比特数组输出流
特点
包含一个缓冲区,该缓冲区存储从流中读取的数据
API
①ByteArrayInputStream(byte[] buf)
②ByteArrayInputStream(byte[] buf,int offset,int length)
Demo1
。
package IODemo;
/*
文件拷贝
*/
import java.io.*;
public class ByteArrayDemo {
public static void main(String[] args) throws IOException {
//1.创建一个文件管道流
FileInputStream fis = new FileInputStream("C:\\Users\\Gypsophila\\Desktop\\picture.bmp");
//2.创建一个文件输出流
FileOutputStream fos = new FileOutputStream("C:\\Users\\Gypsophila\\Desktop\\background.bmp");
//3.创建数组管道流
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
//4.定义数组
byte[] data = new byte[1024];
while(true){
//5.读取数据
int len = fis.read(data);
//7.跳出
if(len == -1){
break;
}
//6.写数据
bos.write(data,0,len);
}
bos.writeTo(fos);
//8.关闭管道
fis.close();
fos.close();
bos.close();
}
}
Demo2
package IODemo;
import java.io.*;
public class ByteArrayDemo2 {
public static void main(String[] args) throws IOException {
String str = "爱神的箭安徽的撒,按时段和。阿萨德还是";
//1.创建一个内存管道流
ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());
//2.创建一个文件输出流
FileOutputStream fos = new FileOutputStream("C:\\Users\\Gypsophila\\Desktop\\1.txt");
//3.创建数组管道流
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
//4.定义数组
byte[] data = new byte[1024];
while(true){
//5.读取数据
int len = bis.read(data);
//7.跳出
if(len == -1){
break;
}
//6.写数据
bos.write(data,0,len);
}
bos.writeTo(fos);
//8.关闭管道
bis.close();
fos.close();
bos.close();
}
}
Data字节流
①构造:DataInputStream 数据输入流 DataOutputStream 数据输出流
②特点:读取数据就是java的数据类型,属于处理流
package IODemo;
/*
文件拷贝
*/
import java.io.*;
public class DataStreamDemo {
public static void main(String[] args) throws IOException {
/*//1.创建文件管道流
FileInputStream fis = new FileInputStream("C:\\Users\\Gypsophila\\Desktop\\background.bmp");
//2.创建数据管道流
DataInputStream dis = new DataInputStream(fis);*/
//1.创建输出管道流
DataInputStream dis = new DataInputStream(new FileInputStream("C:\\Users\\Gypsophila\\Desktop\\background.bmp"));
//2.创建输出管道流
DataOutputStream dos = new DataOutputStream(new FileOutputStream("C:\\Users\\Gypsophila\\Desktop\\1.bmp"));
//3.边读边写
byte[] b = new byte[1024];
while(true){
int len = dis.read(b);
if(len ==-1){
break;
}
dos.write(b,0,len);
}
//4.关闭通道
dis.close();
dos.close();
}
}
缓冲字节流
①构造:BufferedInputStream 缓冲输入字节流
BufferedOutputStream 缓冲输出字节流
②特点:
A:处理流,一边和程序连接,一边和修饰流或者字节流连接,不能直接,面对外部介质(文件,网络)
B:缓冲流中的缓冲区为了提高读取或写入的效率,将读取或者写入的文字暂时存储在缓冲区,当缓冲区满了之后,一起将数据读出或者写入,减少写入的次数
③API
package IODemo;
/*
BufferedInputStream
BufferedOutputStream 读取效率高,存在缓冲区
*/
/*
实现文字拷贝
*/
import java.io.*;
public class BufferStreamDemo {
public static void main(String[] args) throws IOException {
//1.创建一个输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Users\\Gypsophila\\Desktop\\test.txt"));
//2.创建一个输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\Users\\Gypsophila\\Desktop\\test1.txt"));
//3.边读边写
byte[] data = new byte[1025];
while(true){
int len = bis.read(data);
if(len == -1){
break;
}
bos.write(data,0,len);
bos.flush();//当缓冲区满时会自动刷出
}
//4.关闭流
bis.close();
bos.close();
}
}