ByteArrayOutputStream及其在IO中的应用

 

一、基本概念

在创建ByteArrayOutputStream类实例时,内存中会创建一个byte数组类型的缓冲区,缓冲区会随着数据的不断写入而自动增长。

可使用toByteArray()和toString()获取数据。

关闭ByteArrayOutputStream无效,此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException。

 

二、例子

	/**
	 * 读取文件内容
	 *
	 * @param filename 文件名
	 * @return
	 */
	public String read(String filename) throws Exception
	{
		FileInputStream fis = new.FileInputStream(filename);
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		// 将内容读到buffer中,读到末尾为-1
		while ((len = fis.read(buffer)) != -1)
		{
			// 本例子将每次读到字节数组(buffer变量)内容写到内存缓冲区中,起到保存每次内容的作用
			outStream.write(buffer, 0, len);
		}
		byte[] data = outStream.toByteArray(); // 取内存中保存的数据
		fis.close();
		String result = new String(data, "UTF-8");
		return result;
	}

 

时间: 2024-11-03 21:48:39

ByteArrayOutputStream及其在IO中的应用的相关文章

关于网络IO中的同步、异步、阻塞、非阻塞

在高并发编程当中,我们经常会遇到一些异步.非阻塞等一些概念,一些常用的技术比如异步的httpclient.netty nio.nginx.node.js等,它们的原理大都跟异步.非阻塞有关.特别是在服务器开发中,并发的请求处理是个大问题,阻塞式的函数会导致资源浪费和时间延迟.通过事件注册.异步函数,开发人员可以提高资源的利用率,性能也会改善.其nginx和node.js处理并发都是采用的事件驱动异步非阻塞模式.其中nginx中处理并发用的是epoll,poll,queue等方式,node.js使

java.io中的默认路径是jre所在磁盘根目录么

问题描述 java.io中的默认路径是jre所在磁盘根目录么 如题,File对象中写入相对路径,再显示绝对路径,发现在D:,代码如下.我的jre,eclipse和程序文件夹都在D盘下,但都不在根目录,不知是否java.io中的默认路径都是所在磁盘的根目录. static void p(String s) { System.out.println(s); } public static void main(String[] args) { // TODO Auto-generated method

fileoutputstream-关于java的IO中PrintWriter问题

问题描述 关于java的IO中PrintWriter问题 public class PrintIOTest { public static void main(String[] ages){ try{ FileOutputStream fos = new FileOutputStream(""test.txt""); PrintStream ps = new PrintStream(fos); ps.print(""helloworld!&quo

java.io 中不使用close()方法资源为何cg无法回收?

问题描述 java.io 中不使用close()方法资源为何cg无法回收? 如题,new FileInputStream()新建的文件流都必须要调用close()方法关闭,close方法的介绍是关闭和释放系统资源,并且如果未使用则会资源泄露. 但当指向 FileInputStream()对象的指针离开该对象,CG不是应该回收资源么,用new创建的对象都在栈中,为什么这个FileInputStream()不会自己回收呢? 解决方案 文件流对像不样,不是由虚拟机来掌握的.文件流一般申请的空间是直接到

大话存储系列22——存储系统内部IO 中

4.卷管理层IO 卷管理层在某种程度上来讲是为了弥补底层存储系统的一些不足之处的,比如LUN空间的动态管理等.卷管理层最大的任务是做Block级的映射.对于IO的处理,卷层只做了一个将映射翻译之后的IO向下转发的动作以及反向过程.另外,应用程序可以直接对某个卷进行IO操作而不经过文件系统.我们所说的不经过文件系统,并不是说Bypass系统内核缓存的Direct IO,而是完全不需要FS处理任何块映射关系.这时就需要由应用程序自行管理底层存储空间,而且此时不能对这个卷进行FS格式或者其他未经应用程

关于 java.io 中的 File.listFiles(String dir)

 本来想用如下代码得到tempfile文件夹下的最后一个文件[夹]的(用文件名排序), File tempfile = new File(dir + File.separator + "results"); File list[] = tempfile.listFiles(); int i = list.length - 1; File file = list[i];可惜当tempfile 下只有两个文件时,就会出错!可知: File.listFiles(String dir) 所得到

Socket和io中遇到的一点小问题

问题描述 写法1:try{while(connect){//控制循环结束,初始为trueStringstr=dis.readUTF();System.out.println(str);}}catch(EOFExceptione){System.out.println("客户端断开连接");}catch(IOExceptione){System.out.println("接收错误");e.printStackTrace();}finally{stop();//将con

在java.io中怎么实现文件内容的部分修改

问题描述 我只能全部读取,然后保存在list里面,然后对特定行修改,然后在全部写入,可是这么写,如果数据太多的话,就费时了,怎么实现部分修改啊?就是不对特定行以后的数据进行遍历,并且保证原有的未修改数据不被覆盖. 解决方案 使用java.io.RandomAccessFile,可以随机读取文件.

IO中read()方法解释

问题描述 字节流的read()方法,为什么返回的不是byte型,而是int型?read()方法读到末尾返回-1,在操作数据时很容易出现连续多个1的情况,而连续读到8个1,就是-1,是什么意思??谢谢 解决方案 解决方案二:这个read()的放回类型必须是int.你去看j2se的api上面有.解决方案三:估计是int比较通用直接用byte可能会有问题把byte存在int里也不会精度丢失解决方案四:对返回的-1进行判断啊,通常用while循环,读出文件中的数据.举个例子:publicstaticby