字节流
注意:
字节流并没有刷新,因为字节流底层并没有缓冲区,
字符流需要缓存一个字符的字节再刷新。
public static void writeFile() throws IOException
{
FileOutputStream fos = new FileOutputStream(“C:\Users\IO流\demo.txt”);
fos.write(“abcd”.getBytes());//getBytes将字节变为字符
fos.close();
}
public static void readFile() throws IOException
{
FileInputStream fis = new FileInputStream("C:\\Users\\12.IO流\\demo.txt");
byte[] buf = new byte[fis.available()];//定义一个刚刚好的缓冲区,不用循环
fis.read(buf);
System.out.println(new String(buf));
fis.close();
}
read方法注意
注意:read()方法读取的是一个字节,为什么返回是int,而不是byte
字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111;那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上;24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型
复制一个图片:
思路:
1.用字节读取流对象和图片关联。
2.用字节写入流对象创建一个图片文件,用于存储获取到的图片数据。
3.通过循环读写,完成数据的存储。
4.关闭资源。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50/**
* 此代码是演示用字节流实现图片的复制
* */
import java.io.*;
public class CopyPicture {
public static void main(String[] args) {
FileOutputStream fos = null;
FileInputStream fis =null;
try {
fis = new FileInputStream("C:\\Users\\IO流\\测试数据\\1.png");
fos = new FileOutputStream("C:\\Users\\IO流\\测试数据\\2.png");
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) {
throw new RuntimeException("写入关闭失败");
}
}
if(fis!=null)
{
try {
fis.close();
}catch (IOException e) {
throw new RuntimeException("读取关闭失败");
}
}
}
}
}
演示mp3的复制,通过缓冲区:
BufferedOutputStream
BufferedInputStream1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31/**
* 此代码演示使用字节流缓冲区复制mp3文件
* 为了方便,我没有写try代码块而是直接抛出异常
* 具体的异常处理方式请看该包内的另一个文档"CopyPicture.java"
* */
import java.io.*;
public interface CopyMp3 {
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis();
Copymp3();
long end = System.currentTimeMillis();
System.out.println(end-start+"毫秒");
}
public static void Copymp3() throws IOException
{
FileInputStream fis = new FileInputStream("C:\\Users\\IO流\\测试数据\\1.mp3");
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("C:\\Users\\IO流\\测试数据\\2.mp3");
BufferedOutputStream bos = new BufferedOutputStream(fos);
int by = 0;
while((by = bis.read()) != -1)
{
bos.write(by);
}
bos.close();
bis.close();
}
}