J2SE视频笔记(15)

J2SE视频笔记(15)

字节流

要转化为字节数组

InputStream读取文件

  • 输入是指从硬盘到内存
  • 因为它是流,所以用完了之后别忘了关掉。
  • 第一种方式,比较low的,是从字节数组中读取数据。这种方式要提前设置字节数组空间的大小,所以实现不是很合适。
  • Markdown

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    public class Demo1 {
    public static void main(String[] args) throws Exception {
    File file=new File("F://测试文件.txt");
    // 实例化FileInputStream
    InputStream inputStream=new FileInputStream(file);
    byte b[]=new byte[1024]; // 字节数组
    inputStream.read(b);
    inputStream.close();
    String ss=new String(b); // 解码方式
    System.out.println("读取的内容是:"+ss);
    }
    }
  • 当然了,实际应用中我们并不知道字节数组的大小,所以我们需要进行改进一下。

    1
    2
    int fileLength=(int)file.length(); //读取文件的大小
    byte b[]=new byte[fileLength]; //设定指定大小的字节数组
  • 以上两种方法均是一批一批的读取,下面我们还有一个字节一个字节的读取方式。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    int tmp=0;
    int len=0;
    // 这个是一个字节一个字节的读取,而不是一批一批的读取
    while((tmp=inputStream.read())!=-1){
    // 读取完放到b数组里面去
    b[len++]=(byte)tmp;
    }
    String ss=new String(b);
    System.out.println("读取的内容是:"+ss);

OutputStream写入文件

  • 主要方法就write和close
  • out.write(b): 将字节内容从b中读取出来,然后写入到文件中去
  • 同时也别忘了关闭输出流
  • Markdown

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    public class Demo4 {
    public static void main(String[] args) throws Exception {
    File file=new File("F://测试文件.txt");
    OutputStream outputStream=new FileOutputStream(file);
    String str="你好,我好,大家好~";
    //getBytes使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中
    byte b[]=str.getBytes();
    outputStream.write(b);
    outputStream.close();
    }
    }
  • 当然上面那种方法是会覆盖原来的文件的,所以我们用另外一种方式就可以实现追加,即追加到原先文件的末尾处。

  • Markdown

Buffered他们都是带缓冲区的,所以读入,或写入会快一点。因为你一次性读太多会来不及,所以先放入到缓冲区内,然后再从缓冲区中慢慢读就可以了。

BufferdInputStream(带缓冲的inputstream)

1
2
3
// 定义了一个带缓冲的字节输入流
InputStream inputStream=new FileInputStream("F://一头扎进JSP2.docx");
BufferedInputStream bufferedInputStream=new BufferedInputStream(inputStream);

BufferdOutputStream(带缓冲的outputstream)

1
2
3
OutputStream outputStream=new FileOutputStream("D://赋值 的文件2.docx");
// 定义了一个带缓冲的字节输出流
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(outputStream);

利用缓冲所花费的读取文件的时间会远远的少于没有利用缓冲的

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
51
52
53
54
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class Demo6 {
/**
* 缓冲
* @throws Exception
*/
public static void bufferStream() throws Exception{
// 定义了一个带缓冲的字节输入流
InputStream inputStream=new FileInputStream("F://一头扎进JSP2.docx");
BufferedInputStream bufferedInputStream=new BufferedInputStream(inputStream);
OutputStream outputStream=new FileOutputStream("D://赋值 的文件2.docx");
// 定义了一个带缓冲的字节输出流
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(outputStream);
int b=0;
long startTime=System.currentTimeMillis(); // 开始时间
// inputstream.read()返回的是一个int类型
while((b=bufferedInputStream.read())!=-1){
bufferedOutputStream.write(b);
}
bufferedInputStream.close();
bufferedOutputStream.close();
long endTime=System.currentTimeMillis(); //结束时间
System.out.println("缓冲花费的时间:"+(endTime-startTime)+"ms");
}
/**
* 非缓冲
* @throws Exception
*/
public static void stream() throws Exception{
InputStream inputStream=new FileInputStream("F://一头扎进JSP.docx");
OutputStream outputStream=new FileOutputStream("D://赋值 的文件.docx");
int b=0;
long startTime=System.currentTimeMillis(); // 开始时间
// inputstream.read()返回的是一个int类型
while((b=inputStream.read())!=-1){
outputStream.write(b);
}
inputStream.close();
outputStream.close();
long endTime=System.currentTimeMillis(); //结束时间
System.out.println("非缓冲花费的时间:"+(endTime-startTime)+"ms");
}
public static void main(String[] args) throws Exception {
stream();
bufferStream();
}
}

热评文章