Java IO 之内存操作流概念与范例
内存输入流:
ByteArrayInputStream:在内存中引用开辟好了的byte数组作为数据源缓冲区构造内存输入流对象,该流对象可以读取这个byte数组内的内容;
内存输出流:
ByteArrayOutputStream:构造一个内存中的输出流对象;该对象自动在内存中开辟一个byte数组作为数据缓冲区用于将数据写出到该缓冲区,而且可以把缓冲区中的
内容写出到其他输出流并保存至内存以外的文件,其他流对象也可以直接操作该流,比如:标准输出流可以输出该流的内容(通过该流的toString());
内存流就是只在内存中产生的流对象:
涉及到两个内存数组作为缓冲区:
1.用于内存输入流对象读取的缓冲区:含有待读取数据的byte数组;该数组的数据可能来自于外部文件流也可能是直接赋予的;这个数组是程序员设置的;
2.用于内存输出流对象写入的缓冲区:输出流对象自动构造byte数组,可以指定该数组的长度,用于写入数据,这个数据可以是内存输入流的,也可能是任何其他
在内存中能访问的数据;
内存输入流:
public class ByteArrayInputStream extends InputStream;// 字节数组输入流;其实是从内存单元中读取数据的操作;
public ByteArrayInputStream(byte[] buf);// 引用byte数组构造输入流,读取该数组数据;这个数组也称为输入流缓冲区;
public ByteArrayInputStream(byte[] buf,
int offset,
int length);// 引用byte数组指定范围的数据构造输入流,读取该范围的数据;
public int available(); // 该输入流对象可以读取或跳过的有效字节长度,其实是输入流缓冲区的有效数据字节长度;
public int read(); // 读取当前位置开始的一个字节数据并返回该字节的0到255范围的int值;若到达数据末尾,返回-1;
public int read(byte[] b,
int off,
int len); // 读取的数据存入b数组的指定范围中;
public void close()
throws IOException;
内存输出流方法:
public class ByteArrayOutputStream extends OutputStream;//字节数组输出流(内存输出流)
public ByteArrayOutputStream(); // 自动创建一个byte数组,默认初始长度为32bytes,不够自动增长;
public ByteArrayOutputStream(int size);// 自动创建一个指定长度的byte数组;
public void write(int b);// 该int是由byte型转换而来的,只有低八位是有效的,写入时将转换int –> byte型,按字节写入;
public void write(byte[] b,
int off,
int len);// 可以把内存中的b数组的指定范围的数据写入内存缓冲区;
public void writeTo(OutputStream out) throws IOException;// 等价于:调用out.write(buf, 0, count),内存缓冲区数据写出到外部文件;
public byte[] toByteArray();// 创建新byte数组,复制所有当前输出流缓冲区中的数据,并返回该数组;
public int size(); // 返回当前缓冲区的字节长度;
public String toString();// 把当前缓冲区的内容按照本地字符编码设置转换为String类型;
public String toString(String charsetName)throws UnsupportedEncodingException;// 指定转换字符编码后转换;
public void close() throws IOException;// 释放流缓冲区,缓冲区数据才可自动刷新;
———–简单的内存输入流,输出流的使用:
package com.mldn;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class ByteArray
{
public static void main(String[] args)
{
String str = “Hello, World!”; // 准备一个String数据,存在于内存中
ByteArrayInputStream byteIn = null; // 用于读入内存
ByteArrayOutputStream byteOut = null;// 用于写出内存
byteIn = new ByteArrayInputStream(str.getBytes()); // 内存输入流对象,将形参byte数组作为该流引用的数据源
byteOut = new ByteArrayOutputStream(); // 内存输出流对象,自动在内存中开辟byte数组作为缓冲区接收流输出;
int temp = 0; // 用于接收临时字节
while ((temp = byteIn.read()) != -1) // 未到数组尾
{
byteOut.write(temp); // 写出字节到内存缓冲区
char c = (char)temp;
char ch = Character.toLowerCase(c); // int — > char — > Character —>.toLowercase() –> char
System.out.print(ch); // 将处理的字符输出到标准输出文件
}
try
{
byteIn.close(); // 释放资源;
byteOut.close(); // 释放缓冲区;
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println(byteOut); // 调用byteOut输出流对象的toString()方法输出缓冲区内容
}
}
/*
administrator@xu-desktop:~$ java com.mldn.ByteArray
hello, world!Hello, World!
*/
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《Java IO 之内存操作流概念与范例》
本文地址:http://www.xiupu.net/archives-83.html
关注公众号:
微信赞赏
支付宝赞赏