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 .io.ByteArrayInputStream;
import .io.ByteArrayOutputStream;
import .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:~$ com.mldn.ByteArray
hello, world!Hello, World!

*/

 

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《Java IO 之内存操作流概念与范例
本文地址:https://www.zhiletu.com/archives-83.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微