字节数组流和数据流

简介: 字节数组流和数据流

字节数组流

基于内存操作,内部维护着一个字节数组,我们可以利用流的读取机制来处理字符串,无需关闭

ByteArrayInputStream

包含一个内部缓冲区,该缓冲区包含从流中读取的字节,内部计数器跟踪read方法要提供的下一个字节,关闭ByteArrayInputStream无效,此类中的方法在关闭流后仍可以使用,而不会产生任何IOException

ByteArrayOutputStream

此类实现了一个输出流,其中的数据被写入一个byte数组,缓冲区会随着数据的不断写入而自动增长,可使用toByteArray()和toString()获取数据,关闭ByteArrayOutputStream无效,此类中的方法在关闭此流后仍可以被调用,而不会产生任何IoException。

小案例:输出字符串中的字母

public class Test10 {
    public static void main(String[] args) {
        String str = "  fdkfjsk**^%$%>";
        ByteArrayInputStream inputStream = new ByteArrayInputStream(str.getBytes());
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        int len = -1;//每次读取的字节
        while ((len = inputStream.read()) != -1) {
            if (len >= 65 && len <= 90 || len >= 98 && len <= 122) {
                outputStream.write(len);
            }
        }
        // 此时无需关闭,原因:字节数组流是基于内存的操作流
        System.out.println(outputStream.toString());
    }
}

数据流:

DataInputStream:数据输入流允许应用程序以与机器无关的方式从底层输入流中读取基本java数据类型,应用程序可以使用数据输出流写入稍后由数据输入流读取的数据,DataInputStream对于多线程访问不一定是安全的,线程安全是可选的,它由此类方法使用者负责

DataOutputStream:数据输出流允许应用程序以适当方式将基本java数据类型写入输出流中,然后,应用程序可以使用数据输入流将数据读入

代码演示:

public class Test11 {
    public static void main(String[] args) {
        write();
        reader();
    }
    private static void reader() {
        InputStream in = null;
        try {
            in = new FileInputStream("E:\\idea_workspace3\\yangli\\class_obj\\src\\com\\lili\\file\\lili.txt");
            BufferedInputStream bis = new BufferedInputStream(in);
            DataInputStream dis = new DataInputStream(bis);
            //按顺序
            char c = dis.readChar();
            int read = dis.read();
            String s = dis.readUTF();
            double v = dis.readDouble();
            System.out.println(c + "," + read + "," + s + "," + v);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static void write() {
        try {
            OutputStream outputStream = new FileOutputStream("E:\\idea_workspace3\\yangli\\class_obj\\src\\com\\lili\\file\\lili.txt");
            BufferedOutputStream out = new BufferedOutputStream(outputStream);
            DataOutputStream dos = new DataOutputStream(out);
            dos.writeChar('1');
            dos.write(2);
            dos.writeUTF("丽丽");
            dos.writeDouble(12.23);
            dos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


目录
相关文章
|
26天前
|
C语言
数据流与缓冲区
数据流 就C程序而言,从程序移进,移出字节,这种字节流就叫做流。程序与数据的交互是以流的形式进行的。进行C语言文件的读写时,都会先进行“打开文件”操作,这个操作就是在打开数据流,而“关闭文件”操作就是关闭数据流。 缓冲区 在程序执行时,所提供的额外内存,可用来暂时存放准备执行的数据。它的设置是为了提高存取效率,因为内存的存取速度比磁盘驱动器快得多。 当使用标准I/O函数(包含在头文件stdio.h中)时,系统会自动设置缓冲区,并通过数据流来读写文件。当进行文件读取时,是先打开数据流,将磁盘上的文件信息拷贝到缓冲区内,然后程序再从缓冲区中读取所需数据。事实
|
7月前
|
数据处理 C++
C++程序字符串流
C++程序字符串流
47 2
|
7月前
|
存储 C++ iOS开发
C++ 文件和流
C++ 文件和流
52 0
java流是指在Java中用来读写数据的一组有序的数据序列,它可以将数据从一个地方带到另一个地方。java流分为输入流和输出流,输入流是从源读取数据的流,而输出流是将数据写入到目的地的流。Java流又可以分为字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char = 2byte = 16bit)。Java流还可以分为节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的一种流。
127 0
|
7月前
|
存储 C++
62字符串流
62字符串流
40 0
|
7月前
|
程序员 C++ iOS开发
c++文件和流
c++文件和流
41 0
|
NoSQL Java Redis
字节数组流ByteArrayOut(In)putStream使用详解
字节数组流ByteArrayOut(In)putStream使用详解
62 0
|
SQL JavaScript 前端开发
开始使用流
Java 8 中的 Stream 俗称为流,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念 Stream 用于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作 Stream API 借助于 Lambda 表达式,极大的提高编程效率和程序可读性 同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势 通过下面的例子我们可以初步体会到使用 Stream 处理集合的便利性
54 1
I/O流
IO流:I的全称是Input,O的全称是Output。表示读取,流可以看做是程序传输数据的通道。 作用:解决程序请求资源,输出资源的问题。
58 0