BufferedInputStream与BufferedOutputStream用法简介

Java8 I/O源码-BufferedInputStream与BufferedOutputStream BufferedInputStream是缓冲输入流,作用是为另一个输入流添加一些功能,比如缓冲输入功能以及支持mark和reset方法的能力。在创建BufferedInputStream时,会在内存中创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流一次性填充多个字节到该内部缓冲区。当程序需要读取字节时,直接从内部缓冲区中读取。当内部缓冲区中数据被读完后,会再次从包含的输入流一次性填充多个字节 阅读详情

      BufferedInputStream是带缓冲区的输入流,默认缓冲区大小是8M,能够减少访问磁盘的次数,提高文件读取性能;BufferedOutputStream是带缓冲区的输出流,能够提高文件的写入效率。BufferedInputStream与BufferedOutputStream分别是FilterInputStream类和FilterOutputStream类的子类,实现了装饰设计模式。

       BufferedInputStream类的例子如下:

import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class BufferedInputStreamDemo01{

	// 声明常量
        public static final int SIZE=1024;

	public static void main(String[] args){
	   //变量声明
           File f=null;
	   InputStream input=null;
	   BufferedInputStream bis=null;
           StringBuilder strBuild=null;
	   SimpleDateFormat sdf=null;
	   Date d=null;
           long start=0L;
	   long end=0L; 

          try{
		  sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
		  
		  strBuild=new StringBuilder();
                  start=System.currentTimeMillis();
		  d=new Date();
		  if(d!=null){
                  d.setTime(start);
	     }
          System.out.println("程序开始执行时间:"+sdf.format(d));

	  f=new File("d:"+File.separator+"demo.txt");
          input=new FileInputStream(f);
          // 指定文件带缓冲区的读取流且指定缓冲区大小为2KB
	  bis=new BufferedInputStream(input,2*SIZE);
          int bisLength=bis.available();
          int readLength=0;
          byte[] byteArray=new byte[SIZE];
          int tmp=0;
          while((tmp=bis.read(byteArray))!=-1){ 
                strBuild.append(new String(byteArray,0,tmp));
		System.out.println("每次读取字节数量:"+tmp);
		System.out.println("文件中剩余字节数:"+input.available());
	 }
          
          System.out.println(String.format("文件的大小:%d,缓冲区读取流返回的大小:%d",f.length(),bisLength));
	  System.out.println("文件的内容:"+strBuild.toString());
	  System.out.println("字符串长度:"+strBuild.toString().length());
	  char[] cTmp=strBuild.toString().toCharArray();
	  System.out.println("字符串->字符数组长度:"+cTmp.length);

	  end=System.currentTimeMillis();
	  d=new Date();
	  if(d!=null){ 
	     d.setTime(end);
	  }
	  System.out.println("程序执行的结束时间:"+sdf.format(d));
	  System.out.println("<-------------******************---------------->");
	  System.out.println("程序执行时间(ms):"+(end-start)+"毫秒");

       }catch(FileNotFoundException ex){
          ex.printStackTrace();
       }catch(IOException ex){
          ex.printStackTrace();
       }finally{
         try{
               if(input!=null){
		 input.close();
		}
	       if(bis!=null){
		 bis.close(); 
	       }
         }catch(IOException ex){
           ex.printStackTrace();
         }
      }
   }
}

   BufferedOutputStream类的例子如下:
import java.io.File;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class BufferedOutputStreamDemo01{
        public static final int SIZE=1024;
        public static final String DRIVERNAME="oracle.jdbc.driver.OracleDriver";
        public static final String DBURL="jdbc:oracle:thin:@IP:1521:DB名称";
	public static final String USERNAME="用户名";
	public static final String PASSWORD="密码";
    
	static{
	   try{
	        // 加载驱动程序
	        Class.forName(DRIVERNAME);
	      }catch(ClassNotFoundException ex){
	        ex.printStackTrace();
	    }
	}

	public static void main(String[] args){
	   // 变量声明
	   File f=null;
	   OutputStream output=null; 
	   BufferedOutputStream bos=null;
           Connection con=null;
	   PreparedStatement pst=null;
           ResultSet rs=null;
	   StringBuilder strBuild=null;
 
           try{
		  String sql=" select vendor_no,vendor_name,address,phone,email,zipcode from VENDOR";
		   
		  con=new BufferedOutputStreamDemo01().getConnection();
                  // 获得数据库操作类
                  pst=new BufferedOutputStreamDemo01().getPst(con,sql);
                  // 获得结果集
		  rs=pst.executeQuery();

		  f=new File("F:"+File.separator+"tmp.txt");
		  output=new FileOutputStream(f,false);
		  bos=new BufferedOutputStream(output,SIZE*4);
          
		  while(rs.next()){
                        strBuild=new StringBuilder();
            
			// 店号
			strBuild.append(rs.getString("vendor_no"));
			strBuild.append(",");

                        // 店名
			strBuild.append(rs.getString("vendor_name"));
			strBuild.append(",");
            
			// 地址
			strBuild.append(rs.getString("address"));
			strBuild.append(",");
            
			// 电话
			strBuild.append(rs.getString("phone"));
			strBuild.append(",");

                        // 邮件
			strBuild.append(rs.getString("email"));
			strBuild.append(",");

                        // 邮政编码
			strBuild.append(rs.getString("zipcode"));
			strBuild.append("\n");
            
                        bos.write(strBuild.toString().getBytes("utf-8"));
		  }

           }catch(IOException ex1){
               ex1.printStackTrace();
	   }catch(SQLException ex){
	       ex.printStackTrace();
	   }finally{
               try{
			 // 关闭流
			 if(output!=null){
			   output.close(); 
			 }
			 if(bos!=null){
                            bos.close();
			 } 
			 //关闭数据库连接
			 if(rs!=null){
                            rs.close();
			 }
                         if(pst!=null){
                            pst.close();
			 }
                         if(con!=null){
			   con.close();
			 }
                 }catch(IOException ex){
	            ex.printStackTrace();
                 }catch(SQLException ex){
                    ex.printStackTrace();
	         }
	     }
	}
    
	/**
        **获得数据库连接
	**
	**/
	public static Connection getConnection(){
	   Connection con=null;
	   try{
	       // 获得数据库连接
	       con=DriverManager.getConnection(DBURL,USERNAME,PASSWORD);
	   }catch(SQLException ex){
	       ex.printStackTrace();
	   } 

	   return con;
	}
    
	/**
        **获得数据库操作类
	**/
	public static PreparedStatement getPst(Connection con,String sql){
            PreparedStatement pst=null;
	    try{
		  pst=con.prepareStatement(sql);
	       }catch(SQLException ex){
		  ex.printStackTrace();
	       } 

	    return pst;
	}
}

以上带缓冲区的输入输出流实例希望对初学者有所帮助,望批评指正!

【达内课程】BufferedOutputStream、BufferedInputStream用法 BufferedOutputStream、BufferedInputStream使用 阅读详情

相关推荐

RISC-V— 架构基础知识学习

蜂鸟 E200 系列是一个开源的RISC-V 处理器。蜂鸟 E200 系列由中国大陆研发团队开发,用户能够轻松与开发人员取得交流和支持。RI蜂鸟 E200 处理器研发团队拥有在国际一流公司多年开发处理器的经验,使用稳健的Verilog 2001 语法编写的可综合 RTL 代码,以工业级标准进行开发。蜂鸟 E200 的代码为人工编写,添加丰富的注释且可读性强,非常易于理解。

deilt 1万+

Java中BufferedInputStream和BufferedOutputStream基本使用详解

BufferedInputStream的使用 BufferedInputStream:缓冲字节输入流,是一个高级流(处理流),与其他低级流配合使用。 构造方法//创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个内部缓冲区数组并将其存储在 buf 中,该buf的大小默认为8192。 public BufferedInputStream(Inpu

刘先森 5万+

如何打开本地网络的防火墙端口(Windows版)解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。问题

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 最开始在遇到这个报错的时候十分不解,后来经过思考,有可能是服务器端口占用,或者并没有放行。因此搜查问题的关键是要先去排查问题。 在搜索栏输入控制面板 选择防火墙 选择开关 保证这些选项是开着的 选择高级设置 新建规则 创建协议端口 选择端口 允许连接 点击下一步 创建规则后点击下一步(后命名) 选择任意端口ALL即可 问题排查完毕!socket创建网络通信时,有读者

weixin_46900108的博客 9万+

FileOutputStream输出文件偶尔为空的问题

公司产品是基于android研发的机顶盒,有一个功能是可以将保存在sd卡中的日志文件复制到插入盒子的U盘中,以供传阅。测试发现,当界面提示导出完毕后迅速拔掉U盘,则有很大概率导出的文件大小为0kb(文件存在)。而当界面提示导出完毕后等待约5~6秒钟再拔出,日志文件大小正常。 该问题给我的直观感觉是目标文件创建了,但是没有写入内容。然而通过调试信息发现,经过API写入操作后,目标文件创建并且文件大

Kw学编程 8472

实战分享:如何用Java调用Doris FE接口实现高效Stream Load数据导入(附完整代码)

本文详细介绍了如何通过Java调用Doris FE接口实现高效的Stream Load数据导入,包含完整代码示例和性能优化技巧。Stream Load作为Doris的高效数据导入方式,相比传统JDBC提升5-10倍速度,适用于大规模数据处理场景,帮助开发者解决高吞吐量数据导入挑战。

weixin_29304985的博客 419

axi时序图_(AXI)握手协议(pvld/prdy或者valid-ready)中ready打拍技巧

内容提要ready打拍的问题用FIFO的思路去解决用Buffer的思路去解决问题提出:ready时序如何优化?在valid/ready 握手协议中,valid 与 data的时序优化比较容易理解,(不熟悉valid/ready协议或者valid打拍方法的)大家可以参考上次推送(握手协议(pvld/prdy或者valid-ready或AXI)中Valid及data打拍技巧)。 但是有时候,关键路径是...

weixin_29763641的博客 3327

IO-文件写入

package cn.text.one; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class tect05 { ...

永乐大帝 645

跟着团子学SAP CO:揭秘结果分析码在项目结算中的实战应用(一)KKA2/CJ88

本文深入解析了SAP CO模块中结果分析码在项目结算中的核心作用。以KKA2(方法10)和事务代码CJ88为例,详细阐述了如何在项目完工后一次性确认收入的场景下,通过结果分析功能实现收入与成本的精准匹配,将项目成本暂估为在制品,确保各期利润的准确反映。

gamma的博客 687

Java | BufferedInputStream和BufferedOutputStream的用法

一、BufferedInputStream的用法 BufferedInputStream 是字节缓冲输入流,它包装了一个已存在的字节输入流(如FileInputStream),通过一个内部缓冲区来存储数据,以减少对原始输入流的读取次数。

yingzix688的博客 1100

【GlobalMapper精品教程】027:路径剖面和和视线工具的使用

路径剖面视线工具允许您使用加载的高程数据集沿用户指定的路径获取垂直剖面。要定义生成3D路径剖面所遵循的路径,只需单击鼠标左键选择路径的点,然后石键单击以结束路径。出现一个带有剖面的对话框,允许您设置视线分析或优化端点。

智慧空间实验室 2051

yolov26改进 | Neck/颈部创新篇 | 独创HFPN利用分层特征融合块HFFB模块融合多层次特征改进yolov26(全网独家创新)

本文提出了一种创新的分层特征融合模块HFFB(Hierarchical Feature Fusion Block)来改进YOLOv26的neck部分,构建了名为HFPN的新型特征金字塔网络。该模块通过三分支结构融合局部特征(CNN提取)、全局特征(Swin Transformer提取)和中间特征,并包含空间注意力(SA)、通道注意力(CA)和残差反向MLP(IRMLP)等组件来优化特征融合效果。实验表明,该方法能针对不同尺度目标(大/中/小)进行自适应检测,可根据具体数据集需求选择不同配置。文章详细提供了核

Snu77的博客 486

java outputstream用法_Java中的BufferedInputStream与BufferedOutputStream使用示例

BufferedInputStreamBufferedInputStream 是缓冲输入流。它继承于FilterInputStream。BufferedInputStream 的作用是为另一个输入流添加一些功能,例如,提供“缓冲功能”以及支持“mark()标记”和“reset()重置方法”。BufferedInputStream 本质上是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的Bu...

weixin_39929793的博客 355

基于未来出行解决方案的场景实例:城市空中交通(UAM)的飞行路径规划与避障

本文介绍了使用Simulink进行城市空中交通(UAM)飞行路径规划与避障的仿真方法。主要内容包括:1)UAM系统架构与核心挑战;2)详细建模步骤,从城市3D环境构建到飞行器动力学模拟;3)全局路径规划(A*/RRT*)和局部避障(DWA/APF)算法实现;4)多机协同与冲突解决;5)关键场景仿真与性能评估;6)高级功能拓展方向。通过Simulink的数字孪生系统,可有效验证UAM在复杂城市环境中的可行性,为未来立体交通发展提供技术支撑。

xiaoheshang_123的博客 258

BufferedInputStream和BufferedOutputStream用法 解决乱码

转载网址:http://www.pocketdigi.com/20110805/437.html BufferedInputStream和BufferedOutputStream是过滤流,需要使用已存在的节点来构造,即必须先有InputStream或OutputStream,相对直接读写,这两个流提供带缓存的读写,提高了系统读写效率性能.BufferedInputStream读取的是字节

caiwencongwyj的专栏 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

BufferedInputStream & BufferedOutputStream用法

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.HttpURLConnection; import jav

关于代码的那些事 1694

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: ObjectIOStream 对象流 ByteArrayIOStream 数组流 内存流 ZipOutputStream 压缩流
下一篇: BufferedInputStream的read方法原理
ole_triangle_java
博客等级 码龄10年 82粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值