Java #I/O流#字节流、字符流、缓冲流

I/O流中必不可少的是字节流字符流都是在字节流的基础上参照编码集进行操作,字符流=字节流+编码集

缓冲流为字节流、字符流提高效率,可以发现缓冲流的方法与字节流、字符流差不多

目录

                  字节流:

FileInputStream 类(字节输入流)

FileOutputStream 类(字节输出流)

字符流:

InputStreamReader 类(字符输入流)

OutputStreamWriter 类(字符输出流)

缓冲流:

BufferedInputStream 类(字节缓冲流)

BufferedOutputStream 类(字节缓冲流)

BufferedReader 类(字符缓冲流)

BufferedWriter 类(字符缓冲流)


FileInputStream 类(字节输入流)

创建一个文件输入流

FileInputStream(File file)

通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

FileInputStream(String name)

通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

 读取

 intread()
          从此输入流中读取一个数据字节。
 intread(byte[] b)
          从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
 intread(byte[] b, int off, int len)
          从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
//案例一:
FileInputStream fis = new FileInputStream("test.txt");
fis.read();//返回读取的字节的ASCII码值,当无读取字节时返回-1
//案例二:
FileInputStream fis = new FileInputStream("test.txt");
byte[] buf = new byte[5];//byte[]一个角标所存的元素刚好为一个字节
int len = 0;
while( (len=fis.read(buf)) != -1 ){ /*读取5个字节,存到buf数组中,并返回读取字节数,
                                    若可读取的字节为n<5,则读取n个字节,返回n
                                    */
    System.out.println( new String( buf,0,len ) );//打印buf中从角标0开始,len长度个元素
}

FileOutputStream 类(字节输出流)

创建一个文件输出流

FileOutputStream(File file)
          创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(File file, boolean append)
          创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)
          创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(String name, boolean append)
          创建一个向具有指定 name 的文件中写入数据的输出文件流。

写入

 voidwrite(byte[] b)
          将 b.length 个字节写入此输出流。
 voidwrite(byte[] b, int off, int len)
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
 voidclose()
          关闭此文件输出流并释放与此流有关的所有系统资源。
//案例一:
FileOutputStream fos = new FileOutputStream("text.txt");
fos.write(new String("abcdef").getBytes());//将abcdef转为byte[]数组后写入文件text.txt

InputStreamReader 类(字符输入流)

字符输入流是以字节输入流为基础,读取字节并将其解码为字符

InputStreamReader(InputStream in)
          创建一个使用默认字符集的 InputStreamReader。
InputStreamReader(InputStream in, String charsetName)
          创建使用指定字符集的 InputStreamReader。
 intread()
          读取单个字符。
 intread(char[] cbuf, int offset, int length)
          将字符读入数组中的某一部分。
//案例一:
FileInputStream fis = new FileInputStream("f1.txt");
InputStreamReader isr = new InputStreamReader(fis);//使用默认编码集GBK
System.out.println((char)isr.read());
		
isr.read();
//案例二:
InputStreamReader isr = new InputStreamReader( new FileInputStream("f1.txt") ,"utf-8");//使用utf-8编码集
char[] cbuf = new char[3];
int len = 0;
while ( (len=isr.read(cbuf)) != -1 ) {
	System.out.println( new String(cbuf,0,len) );
}

OutputStreamWriter 类(字符输出流)

字符输出流以字节输出流为基础,将写入的字符编码为字节

OutputStreamWriter(OutputStream out)
          创建使用默认字符编码的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName)
          创建使用指定字符集的 OutputStreamWriter。
 voidwrite(char[] cbuf, int off, int len)
          写入字符数组的某一部分。
 voidwrite(int c)
          写入单个字符。
 voidwrite(String str, int off, int len)
          写入字符串的某一部分。
 voidclose()
          关闭此流,但要先刷新它。
 voidflush()
          刷新该流的缓冲。
//案例一:
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("f1.txt"));
osw.write("写入汉字",0,4);//注意:在缓冲中
osw.flush();//将该流的缓冲刷新到硬盘
osw.close();//关闭该流

BufferedInputStream 类(字节缓冲流)

提高字节读入效率

BufferedInputStream(InputStream in)
          创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。
 intread()
          参见 InputStreamread 方法的常规协定。
 intread(byte[] b, int off, int len)
          从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。
 voidclose()
          关闭此输入流并释放与该流关联的所有系统资源。
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("text.txt"));
//操作与FileInputStream类对象操作类似

BufferedOutputStream 类(字节缓冲流)

提高字节写出效率

BufferedOutputStream(OutputStream out)
          创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
 voidflush()
          刷新此缓冲的输出流。
 voidwrite(byte[] b, int off, int len)
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。
 voidwrite(int b)
          将指定的字节写入此缓冲的输出流。
BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream("text.txt") );

BufferedReader 类(字符缓冲流)

提高字符读入效率

BufferedReader(Reader in)
          创建一个使用默认大小输入缓冲区的缓冲字符输入流。
 intread()
          读取单个字符。
 intread(char[] cbuf, int off, int len)
          将字符读入数组的某一部分。
 StringreadLine()
          读取一个文本行。
 voidclose()
          关闭该流并释放与之关联的所有资源。
BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream("text.txt")) );

BufferedWriter 类(字符缓冲流)

提高字符写出效率

BufferedWriter(Writer out)
          创建一个使用默认大小输出缓冲区的缓冲字符输出流。
 voidwrite(char[] cbuf, int off, int len)
          写入字符数组的某一部分。
 voidwrite(int c)
          写入单个字符。
 voidwrite(String s, int off, int len)
          写入字符串的某一部分。
 voidnewLine()
          写入一个行分隔符。
 voidclose()
          关闭此流,但要先刷新它。
 voidflush()
          刷新该流的缓冲。
BufferWriter bw = new BufferWriter( new OutputStreamWriter(new FileOutputStream("text.txt")));

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值