目录

 

Java  字节流

文件输入流:FileInputStream()

文件输出流,FileOutputStream()

缓冲流

例题:


Java  字节流

字节流适用于:二进制文件的读取,或者用于读取图像数据之类的原始字节流

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java

 

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_02

 

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_缓冲流_03

常用的
字节输入流 
FileInputStream(文件输入流) 
BufferedInputStream(缓冲输入流) 
ObjectInputStream(对象输入流) 

字节输出流
FileOutputStream(文件输出流) 
BufferedOutputStream(缓冲输出流) 
ObjectOutputStream(对象输出流)

文件输入流:FileInputStream()

 

1.从文件系统中的某个文件中获得输入字节 
2.用于读取图像数据之类的原始字节流

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_System_04

读数据:

1、FileInputStream的主要方法(参见下图)
2、read 返回值 -1表示读到了末尾

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_System_05

======================================================================

imooc.txt中存放的内容

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_System_06

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_07

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_08

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_System_09

输出结果

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_10

以上源码:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputDemo1 {

	public static void main(String[] args) {
		//创建一个FileInputStream对象
		try {
			FileInputStream fis=new FileInputStream("imooc.txt");
//			int n=fis.read();
			int n=0;
//			while(n!=-1){
//				System.out.print((char)n);
//				n=fis.read();
//			}
			while((n=fis.read())!=-1){
				System.out.print((char)n);
			}
			
			fis.close();
		}catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch(IOException e){
			e.printStackTrace();
		}
	}

}

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_11

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputDemo2 {

	public static void main(String[] args) {
		// 创建一个FileInputStream对象
		try {
			FileInputStream fis = new FileInputStream("imooc.txt");
			byte[] b=new byte[100];
			fis.read(b,0,5);
			System.out.println(new String(b));
			fis.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

输出结果

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_System_12

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_13

输出结果

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_14

文件输出流,FileOutputStream()

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_System_15

写数值和字符

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputDemo {

	public static void main(String[] args) {
		FileOutputStream fos;
		FileInputStream fis;
		try {
			fos = new FileOutputStream("imooc.txt",true);
			fis=new FileInputStream("imooc.txt");
			fos.write(50);
			fos.write('a');
			System.out.println(fis.read());
			System.out.println((char)fis.read());
			fos.close();
			fis.close();

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

复制图片:

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_System_16


n用来接收read方法的返回值。 read方法的返回值是:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputDemo1 {

	public static void main(String[] args) {
		// 文件拷贝
		try {
			FileInputStream fis=new FileInputStream("happy.gif");
			FileOutputStream fos=new FileOutputStream("happycopy.gif");
			int n=0;
			byte[] b=new byte[1024];
			while((n=fis.read(b))!=-1){
				fos.write(b,0,n);
			}
			fis.close();
			fos.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		}
		

	}

}

缓冲流

缓冲流,在BufferedOutputStream和在BufferedInputStream是不能直接读写数据的。
FileOutputStream和FileInputStream是直接从磁盘中读写数据,速度比较慢。使用容缓冲流,先将数据从从盘中读入缓冲流,在利用FileInputStream在程序中显示使用,写也是相同,先进缓冲流,再进磁盘。
输出缓冲流的构造函数BufferedOutputStream(OutputStream  out),参数是OutputStream的子类。FileOutputStream先将写入的数据存储在BufferedOutputStream的字节数组中,BufferedOutputStream再一次性输出,提高了字节的写入速率。
缓冲流:缓冲流读文件过程如下:
FileInputStream把文件读取出来 不是直接读取到程序当中进行接收 而是通过一个缓冲的流 下一个通道继续读取 再通过缓冲流 流入到字节数组当中 而被我们的程序读取到

缓冲区满了会自动执行写操作,缓冲区不满就不会进行写操作,这时候需要调用flush()或者close()方法强制清空缓冲区,才会正常写入到文件。

缓冲流写:

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_System_17

缓冲流读:

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_System_18

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_缓冲流_19

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_缓冲流_20

使用close或者flush强制清空缓冲区才能将数据从磁盘读入程序中使用

以上源码

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedDemo {

	public static void main(String[] args) {
		try {
			FileOutputStream fos=new FileOutputStream("imooc.txt");
			BufferedOutputStream bos=new BufferedOutputStream(fos);
			FileInputStream fis=new FileInputStream("imooc.txt");
			BufferedInputStream bis=new BufferedInputStream(fis);
			long startTime=System.currentTimeMillis();
			bos.write(50);
			bos.write('a');
			bos.flush();
			System.out.println(bis.read());
			System.out.println((char)bis.read());
			long endTime=System.currentTimeMillis();
			System.out.println(endTime-startTime);
			fos.close();
			bos.close();
			fis.close();
			bis.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

}

例题:

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_21

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_缓冲流_22

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_缓冲流_23

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_24

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_25

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_缓冲流_26

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_缓冲流_27

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_28

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_java_29

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_System_30

为什么java返回给前端的时间变成了时间戳 java返回字节流给前端_System_31