一、字节流
1.基类:InputStream,OutputStream
理解:需求:想要操作图片等多媒体数据,这时就要用到字节流。字节流用来操作媒体文件不管字节字符流都是对文件操作都需要一个对象文件操作对象
2.各种子类的使用:
FileInputStream:
//根据文件大小创建缓冲区数组
FileInputStream fis = new FileInputStream("d:\\fos.txt");
byte[] buf = new byte[fis.available()];//定义一个刚刚好的缓冲区,不用在循环了 但是要慎用,防止内存不够
fis.read(buf);
System.out.println(new String(buf));
fis.close();
//使用数组写入
FileInputStream fis = new FileInputStream("d:\\fos.txt");
byte[] buf = new byte[1024];
int len = 0;
while((len = fis.read(buf)) != -1){
System.out.println(new String(buf,0,len));
}
fis.close();
FileOutputStream:
FileOutputStream fos = new FileOutputStream("d:\\fos.txt");
fos.write("adbcd".getBytes());
fos.close();//不涉及刷新功能但资源还是要关
复制一个图片:
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("d:\\io流测试文件\\1.jpg");
fos = new FileOutputStream("d:\\io流测试文件\\2.jpg");
byte[] buf = new byte[1024];
int len = 0;
while((len = fis.read(buf)) != -1){
fos.write(buf,0,len);
}
} catch (IOException e) {
throw new RuntimeException("读取失败");
}finally{
if(fos != null){
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(fis != null){
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
缓冲区:BufferedOuputStream BufferedInputStream 复制MP3
//通过字节流的缓冲区完成复制
BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("d:\\io流测试文件\\1.mp3"));
//读取时候使用FileInpuStream的read方法从硬盘读取,存入缓冲区,然后fis.read实在缓冲区中取的数据
BufferedOutputStream bufos = new BufferedOutputStream((new FileOutputStream("d:\\io流测试文件\\2.mp3")));
int by = 0;
while((by = bufis.read()) != -1){
bufos.write(by);
}
bufis.close();
bufos.close();