字节数组流和数据流

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

字节数组流

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

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();
        }
    }
}


目录
相关文章
|
5月前
|
数据处理 C++
C++程序字符串流
C++程序字符串流
38 2
|
5月前
|
存储 C++ iOS开发
C++ 文件和流
C++ 文件和流
40 0
java流是指在Java中用来读写数据的一组有序的数据序列,它可以将数据从一个地方带到另一个地方。java流分为输入流和输出流,输入流是从源读取数据的流,而输出流是将数据写入到目的地的流。Java流又可以分为字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char = 2byte = 16bit)。Java流还可以分为节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的一种流。
120 0
|
5月前
|
程序员 C++ iOS开发
c++文件和流
c++文件和流
32 0
|
5月前
|
存储 C++
62字符串流
62字符串流
35 0
|
11月前
|
NoSQL Java Redis
字节数组流ByteArrayOut(In)putStream使用详解
字节数组流ByteArrayOut(In)putStream使用详解
53 0
|
SQL JavaScript 前端开发
开始使用流
Java 8 中的 Stream 俗称为流,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念 Stream 用于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作 Stream API 借助于 Lambda 表达式,极大的提高编程效率和程序可读性 同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势 通过下面的例子我们可以初步体会到使用 Stream 处理集合的便利性
46 1
I/O流
IO流:I的全称是Input,O的全称是Output。表示读取,流可以看做是程序传输数据的通道。 作用:解决程序请求资源,输出资源的问题。
52 0
|
存储 Java
字符输入流
字符输入流