雾山的Java学习笔记---I/O(一)(字节流)

字节流是最基本的流,文件的操作、网络数据的传输等等都依赖于字节流。

一、核心类

字节流的核心类是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");

		}
	}
}


你可能感兴趣的:(Java,java,IO)