黑马程序员——IO(字节流)

来源:互联网 发布:智能手机截图软件 编辑:程序博客网 时间:2024/06/05 06:59


-----------android培训java培训、java学习型技术博客、期待与您交流!------------

字节流:

InputStream(读)

OutputStream(写)

用途,不操作文本(需要码表转换),操作图片类型的字节文件。也就是操作字节数据。


字符流使用的是字符数组。

字节流使用的是字节数组。


字节流在没有使用缓冲区时,不需要刷新动作,读一个字节写一个字节。


int available()   返回目标文件字符大小。

byte[] buf = new byte[fis.available()];//定义一个刚刚好的缓冲区。注:数据不能太大。

byte[] buf = new byte[1024];//主要的缓冲区定义方式。


字节流读写操作示例:

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class InputStreamDemo {public static void main(String[] args) throws IOException {output();input();}//写数据public static void output() throws IOException{String str = "abcdefg";//定义写字符流FileOutputStream fos = new FileOutputStream("test.txt");fos.write(str.getBytes());fos.close();}//读数据public static void input() throws IOException{//定义读字符流FileInputStream fis = new FileInputStream("test.txt");byte[] by = new byte[1024];int len =0;while((len=fis.read(by))!=-1)System.out.print(new String(by,0,len));fis.close();}}

读的关键部分:

byte[] by = new byte[1024];//定义缓冲区
int len =0;
while((len=fis.read(by))!=-1)
System.out.print(new String(by,0,len));//将字节流转换从字符串打印

练习:复制图片

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class CopyPic {public static void main(String[] args) throws IOException {//写FileOutputStream fos = new FileOutputStream("阳懿1.jpg");//读FileInputStream fis = new FileInputStream("F:\\照片\\阳懿_11.jpg");byte[] buf = new byte[1024];int len1 = fis.available()/2;int len = 0;int sum = 0;while((len=fis.read(buf))!=-1){fos.write(buf, 0, len);sum +=len;if(sum>=len1)break;}fis.close();fos.close();}}

用BufferedInputStream和BufferedOutputStream复制mp3文件

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 CopyMp3 {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("F:\\音乐\\漂洋过海来看你.mp3");        BufferedInputStream bis = new BufferedInputStream(fis);                FileOutputStream fos = new FileOutputStream("漂洋过海来看你.mp3");        BufferedOutputStream bos = new BufferedOutputStream(fos);                long start = System.currentTimeMillis();        byte[] by = new byte[1024];        int len = 0;        while((len = bis.read(by))!=-1)        {        bos.write(by,0,len);        //bos.write(len);        }        bis.close();        bos.close();                long end = System.currentTimeMillis();                System.out.println(end - start + "毫秒");                        }}


需求:
读取键盘录入。

import java.io.BufferedInputStream;import java.io.IOException;public class SystemInDemo {public static void main(String[] args) throws IOException {BufferedInputStream bi = null;byte[] by = new byte[1024];while(true){bi = new BufferedInputStream(System.in);bi.read(by);System.out.println(new String(by).toString());}}}

InputStreamReader:字节流通向字符流的桥梁。

构造时必须传入一个字节流。

简化形式:键盘录入。

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

OutputStreamWriter:字符流转向字节流的桥梁。

字符输出到控制台。

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));


流操作的基本规律:

流对象比较多,必须明确用哪个。


1、明确源和目的。

源:输入流。   InputStream    Reader

目的:输出流。OutputStream   Writer

2、操作的数据是否是纯文本。

是:字符流。

不是:字节流。

3、当体系明确后,在明确要使用哪个具体的对象。

通过设备来区分:

源设备:内存,硬盘,键盘

目的设备:内存,硬盘,控制台。


扩展:

把录入的数据按照指定的编码表(utf-8),将数据存入文件中。FileWriter等流默认的码表为GBK。

OutputStreamWriter。可以用指定的码表写入文件。

转换流的由来,码表的选择。


System.setIn();改变System.in的指定设备。

System.setOut();改变System.out的指定设备。



-----------android培训java培训、java学习型技术博客、期待与您交流!------------






0 0
原创粉丝点击