gpt4 book ai didi

java - 如何选择需要将字符串写入文件的主要 Java IO 类?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:06:02 25 4
gpt4 key购买 nike

IO 包中有很多不同的类,有些似乎只有细微的差别。
如果您要将一些字符串写入文本文件,并读取它们以备后用。
你会为这两个目的分别使用哪些类,为什么?

  • 缓冲输入流
  • 缓冲输出流
  • 缓冲写入器
  • 缓冲阅读器
  • 数据输入流
  • 数据输出流
  • 文件输入流
  • FileOutputStream
  • 文件阅读器
  • FileWriter
  • InputStreamReader
  • OutputStreamReader
  • 读者
  • 作家
  • 最佳答案

    这一切都取决于你想做什么。

    输出流

    如果您想 写入字节数据 ,您将使用 OutputStream 的一些子类,用于在由具体子类定义的目标中写入字节。

    例如 FileOutputStream 用于逐字节(或字节串)在文件中写入数据。
    BufferedOutputStreamFileOutputStream 的优化扩展,用于写入字节块以最小化磁盘操作数。因此,当您调用 write 时,实际上它可能会或可能不会写入文件 - 取决于缓冲区的状态是否已满。如果缓冲区达到其最大容量,所有字节将立即刷新到文件中。
    ByteArrayOutputStream 仅使用内存块作为目标而不是文件。当前流内容是通过 toByteArray() 方法获得的(为什么需要这样的流将在后面解释)。
    ObjectOutputStream 用于在底层 OutputStream 定义的某个目的地写入对象(类实例)。例如,ObjectOutputStream(FileOutputStream) 会在文件中写入一个对象,而 ObjectOutputStream(ByteArrayOutputStream) 会在内存中写入一个对象。最后一个选项允许您序列化字节缓冲区(字节数组)中的对象,然后可以通过网络将其发送到某个地方。

    请注意,您想通过 ObjectOutputStream 写入某处的任何对象都必须实现 Serializable 接口(interface)。由于对象可能包含对另一个对象的引用,因此所有可从要序列化的对象访问的对象也必须实现 Serializable 接口(interface)为 序列化 ,默认情况下,是写入 对象的完整图形的过程,为 607x19不使用 transient 关键字从序列化中排除类字段,或者您没有在对象的类中定义覆盖默认序列化行为的特殊方法 writeObject/readObject。这些方法旨在实现自定义序列化 i。 e.您可以自己定义如何在 ObjectOutputStream/ObjectInputStream 中/从 A 中写入/读取类字段。假设您正在为其实现自定义序列化的类 B 包含类 b 的对象。而不是将对象 oos.writeObject(b) 写成一个完整的图,我。 e.而不是调用 oos ,其中 writeObject 是在类 A 中实现的 B 方法的参数,您将只在流中写入类 oos.writeBoolean(b.isEnabled) e 的某些字段。 G。 oos.writeInt(b.value)b。只要对象 oos.writeObject(b) 不是通过 Serializable 写入,它就不必实现 Serializable 接口(interface)。有关更多详细信息,请参阅 DataOutputStream 文档。
    class A { int i = 0; B b = new B();} 用于编写原语,如 boolean、char、int、long、float、double。由于任何对象都可以分解为基元 e. G。 class B {double d = 0.0;} , int a, double d 可以简单地写为 DataOutputStream ,您可以使用 ClassLoader 以压缩方式序列化对象,这与写入更多数据的序列化不同。 G。类路径,类版本,...所以 DataOutputStream 可以在运行时识别给定的类,实例化这个类,最后将数据加载到这个空对象。请注意,以这种方式实例化类的名称 + 初始化对象比您自己实例化类并从“原始”Parcelable 自己初始化它的字段要慢得多(这就是为什么 OS Android 更喜欢自定义 DataOutputStream/DataInputStream 接口(interface)而不是标准序列化,它作为向/从 OutputStreamWriter 写入/读取)。

    如果您想 写入字符串数据 ,您将使用 OutputStream 更高级别的输出流,它在由 FileOutputStream 定义的目标中写入字符/字符串(在写入文件的情况下,您将通过 079104您将通过 ByteArrayOutputStream 的内存)。
    FileWriterOutputStreamWriter 的扩展,用于写入文件。
    BufferedWriterBufferedOutputStream 的工作原理相同,但它是为处理字符串和字符而设计的。
    CharArrayWriterByteArrayOutputStream 的工作原理相同,除了字符存储在 char[] 中,这是通过调用 getCharArray() 获得的。
    StringWriterCharArrayWriter 类似,但它允许您编写存储在 StringBuffer 中的字符串,该字符串是通过调用 getBuffer() 获得的。
    PrintWriter 允许您在由 OutputStream 定义的指定目标中写入格式化字符串(此编写器旨在方便记录)。

    输入流

    相同的概念适用于与上述给定输出流(写入器)相关联的输入流(读取器)。

    关于java - 如何选择需要将字符串写入文件的主要 Java IO 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47798140/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com