字节流是最基本的流,文件的操作、网络数据的传输等等都依赖于字节流。
三、几点原则
1、不管是输入还是输出流,使用完毕后要close(),如果是带有缓冲区的输出流,应在关闭前调用flush()。
2、应该尽可能使用缓冲区,来减少IO次数,以提高性能。
一、核心类
字节流的核心类是FileInputStream 和 FileOutputStream。
二、核心方法
1)FileInputStream:
public int read(byte b[], int off, int len)
将输入流中最多 len 个数据字节读入字节数组。尝试读取多达 len 字节,但可能读取较少数量。以整数形式返回实际读取的字节数。如果由于已到达流末尾而不再有数据,则返回 -1。
参数:
b - 读入数据的缓冲区。
off - 在其处写入数据的数组 b 的初始偏移量。
len - 要读取的最大字节数。
2)FileOutputStream:
public void write(byte[] b, int off, int len)
将指定字节数组中从偏移量 off 开始的 len 个字节写入此输出流。write(b, off, len) 的常规协定是:将数组 b 中的某些字节按顺序写入输出流;元素 b[off] 是此操作写入的第一个字节,b[off+len-1] 是此操作写入的最后一个字节。
参数:
b - 数据。
off - 数据中的初始偏移量。
len - 要写入的字节数。
public void flush()
刷新此输出流并强制写出所有缓冲的输出字节。flush 的常规协定是:如果此输出流的实现已经缓冲了以前写入的任何字节,则调用此方法指示应将这些字节立即写入它们预期的目标。
三、几点原则
1、不管是输入还是输出流,使用完毕后要close(),如果是带有缓冲区的输出流,应在关闭前调用flush()。
2、应该尽可能使用缓冲区,来减少IO次数,以提高性能。
四,举例
(1):
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileInputStream_02 {
public static void main(String[] args) {
FileInputStream mIn = null;
FileOutputStream mOut = null;
int b = 0;
try {
mIn = new FileInputStream("D:\\快盘\\java\\src\\mashibinSE08\\FileInputStream_02.java");
mOut = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件读取失败");
System.exit(-1);
}
try {
int num = 0;
while((b = mIn.read()) != -1){
System.out.print((char)b);
mOut.write(b);
num++;
}
mIn.close();
mOut.close();
System.out.println("\n" + num);
} catch (IOException e) {
e.printStackTrace();
}
}
}
(2):
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
//字节流
public class InputTest {
public static void main(String[] args) {
// 声明输入流的引用
FileInputStream fis = null;
// 声明输出流的引用
FileOutputStream fos = null;
try {
// 生成代表输入流的对象
fis = new FileInputStream("d:/input.txt");
// 生成代表输出流的对象
fos = new FileOutputStream("d:/output1.txt");
// 生成一个字节数组
byte[] buffer = new byte[1024];
// 调用输入流对象的read方法读取数据
while (true) {
//1kb,1kb的读取输入流的数据
int temp = fis.read(buffer, 0, buffer.length);
//当fis.read()返回为-1时,代表已经输入流没有数据了
if (temp == -1) {
break;
}
// 调用输出流的对象的write方法
fos.write(buffer, 0, temp);
}
} catch (FileNotFoundException e) {
System.out.println("找不到指定的文件!");
e.printStackTrace();
} catch (IOException e) {
System.out.println("文件读取时发生IO异常!");
e.printStackTrace();
} finally {
//关闭输入输出流,
try {
fis.close();
fos.flush();
fos.close();
} catch (IOException e) {
System.out.println("文件读取时发生IO异常!");
e.printStackTrace();
}
System.out.println("finish");
}
}
}