2

Java知识点总结(JavaIO-字节流)

@(Java知识点总结)[Java, JavaIO]

[toc]

字节流

在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流。

字节流主要操作byte类型数据,以byte数组为准,主要操作类是 OutputStream 类和 InputStream 类。

输出写入数据,输入写出数据

字节输出流:OutputStream

是整个IO包字节输出流的最大父类,定义如下:

public  abstract class OutputStream implements Closeable, Flushable

从定义可以发现:
OutputStream是一个抽象类,必须要通过子类实例化对象,才能使用。
可以使用子类FileOutputStream,向上转型后,操作一个文件。

clipboard.png

clipboard.png

字节输入流:InputStream

可以通过InputStream 从文件中把内容读取出来。

  InputStream 类的定义如下:


public  abstract class InputStream extends Object implements Closeable

同OutputStream 类一样,InputStream 本身也是一个抽象类,必须依靠其子类,如果从文件中读取,使用子类FileInputStream。

clipboard.png

clipboard.png

import  java.io.File;
import  java.io.FileInputStream;
import  java.io.FileOutputStream;
import  java.io.IOException;
import  java.io.InputStream;
import  java.io.OutputStream;
 
public  class Demo03 {
 
  // 将字符串转化为byte[]进行输出
  public static void test1() throws IOException {
    File file = new File("E:" + File.separator + "test.txt");
    OutputStream fos = new FileOutputStream(file);
 
    String str = "Hello world!";
    byte[] b = str.getBytes(); // 只能使用byte数组,所以将字符串转为byte数组
    fos.write(b);
    fos.close();
 
  }
 
  // 在文末追加新的内容,且一个字节一个字节的输出
  public static void test2() throws IOException {
    File file = new File("E:" + File.separator + "test.txt");
    OutputStream fos = new FileOutputStream(file, true);
 
    String str = "\r\nHello world!";
    byte[] b = str.getBytes(); // 只能使用byte数组,所以将字符串转为byte数组
    for (int i = 0; i < b.length; i++) {
      fos.write(b[i]);
    }
    fos.close();
  }
 
  // 读取数据
  public static void test3() throws IOException {
    File file = new File("E:" + File.separator + "test.txt");
    InputStream fis = new FileInputStream(file);
 
    // byte[] b = new byte[1024]; //定义一个数组用来存放读取的数据
    byte[] b = new byte[(int) file.length()]; // 根据文件的数据量,开辟指定大小的 byte 数组
 
    int len = fis.read(b); // 读取内容到数组中
    fis.close();
    System.out.println("读取数据的长度"  + len);
    // System.out.println("内容为:"+new String(b));
    System.out.println("内容为:"  + new String(b, 0, len)); // 把 byte 数组转为字符串输出
  }
 
  // 使用循环,一个字节一个字节读取数据
  public static void test4() throws IOException {
    File file = new File("E:" + File.separator + "test.txt");
    InputStream fis = new FileInputStream(file);
 
    byte[] b = new byte[(int) file.length()];
    for (int i = 0; i < b.length; i++) {
      b[i] = (byte) fis.read();
    }
 
    fis.close();
    System.out.println("内容为:"  + new String(b));
  }
 
  // 如果不知道要输入的内容有多大,则使用是否读到文件末尾的方式来读取文件
  public static void test5() throws IOException {
    File file = new File("E:" + File.separator + "test.txt");
    InputStream fis = new FileInputStream(file);
    
    int len = 0; //用于记录读取数据的个数
    byte[] b = new byte[1024];
    int temp = 0; //接收读取的每一个内容
    
    while((temp = fis.read()) != -1){
      b[len] = (byte) temp;
      len ++;
    }
    
    fis.close();
    System.out.println("内容为:"  + new String(b,0,len));
  }
 
  public static void main(String[] args) {
    try {
       test1();
       test2();
       test5();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}





苏生
803 声望725 粉丝