12.3字节流
1 抽象基类InputStream、OutputStream
字节流可以操作任何数据
字符流使用的是字符数组;字节流使用的是字节数组
实例1:FileInputStream和FileOutputStream的使用。
FileOutputStream fos = new FileOutputStream("a.txt");
fos.write(12);//直接将数据写入到了目的地。
fos.close();//只关闭资源。
FileInputStream fis = new FileInputStream("a.txt");
//fis.available();//获取关联的文件的字节数。
//如果文件体积不是很大,可以这样操作。
byte[] buf = new byte[fis.available()];//创建一个刚刚好的缓冲区。但是这有一个弊端,就是文件过大,大小超出jvm的内容空间时,会内存溢出。
fis.read(buf);
System.out.println(new String(buf));
实例2:编写程序copy一个图片
BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("1.jpg"));
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("2.jpg"));
Int by = 0;
while((by=bufis.read())!=-1){
bufos.write(by);
}
bufos.close();
bufis.close();
二、转换流
在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在一组字节流—字符流的转换流。
1. OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象。
2. InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。
转换过程
以文件操作为例,则在内存中的字符数据需要通过OutputStreamWriter变为字节流才能保存在文件中,读取的时候需要讲读入的字节流通过InputStreamReader变为字符流
OutputStreamWriter和InputStreamReader的构造—他们本身是字符流,又具有转换的作用,因此在构造的时候,需要传入字节流对象
public OutputStreamWriter(OutputStream out)
public OutputStreamWriter(OutputStream out, String charsetName)
public InputStreamReader(InputStream in)
public InputStreamReader(InputStream in, String charsetName)
标准的输入输出是指在控制台方式下,程序与系统进行交互的方式,分为三种:
标准的输入,对象是键盘。
标准的输出,对象是显示器屏幕。
标准的错误输出,对象也是显示器屏幕。
Java通过System类实现标准的输入输出功能
public static final InputStream in
public static final InputStream out
public static final InputStream err
a、标准输入System.in
System.in作为字节输入流类InputStream的对象,实现标准的输入,使用其read()方法从键盘接收数据。
public int read() throws IOException
public int read(byte[] i) throws IOException
b、标准的输出System.out
System.out是打印流类PrintStream的对象,用来实现标准输出。print()和println()方法,支持任意的基本类型作为参数。
public void print(参数)
public void println(参数)