鸿蒙OS开发文档 第9页

鸿蒙OS ObjectOutputStream.PutField

ObjectOutputStream.PutField java.lang.Object |—java.io.ObjectOutputStream.PutField public abstract static class ObjectOutputStream.PutField extends Object 提供对要写入 ObjectOutput 的持久字段的编程访问。 Since: 1.2 构造函数摘要 构造函数 描述 PutField() 方法总结 修饰符和类型 方法 描述 abstract void put(String name, boolean val) 将命名布尔字段的值放入持久字段中。 abstract void put(String name, byte val) 将命名字节字段的值放入持久字段。 abstract void put(String name, char val) 将命名 char 字段的值放入持久字段。 abstract void put(String name, double val) 将命名双字段的值放入持久字段。 abstract void put(String name, float val) 将命名浮点字段的值放入持久字段。 abstract void put(String name, int val) 将命名的 int 字段的值放入持久字段中。 abstract void put(String name, long val) 将命名长字段的值放入持久字段。 abstract void put(String name, short val) 将命名短字段的值放入持久字段中。 abstract void put(String name, Object val) 将命名对象字段的值放入持久字段。 abstract void write(ObjectOutput out) 已弃用。 此方法不会以正确的格式写入此 PutField 对象包含的值,并且可能会导致序列化流损坏。 写入 PutField 数据的正确方法是调用 ObjectOutputStream.writeFields() 方法。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 构造函数详细信息 PutField public PutField() 方法详情 put public abstract void put(String name, boolean val) 将命名布尔字段的值放入持久字段中。 参数: 参数名称 参数描述 name 可序列化字段的名称 val 要分配给字段的值 Throws: Throw名称 Throw描述 IllegalArgumentException 如果名称与正在写入其字段的类的可序列化字段的名称不匹配,或者如果命名字段的类型不是布尔值 put public abstract void put(String name, byte val) 将命名字节字段的值放入持久字段。 参数: 参数名称 参数描述 name 可序列化字段的名称 val 要分配给字段的值 Throws: Throw名称 Throw描述 IllegalArgumentException 如果名称与正在写入其字段的类的可序列化字段的名称不匹配,或者如果命名字段的类型不是字节 put public abstract void put(String name, char val) 将命名 char 字段的值放入持久字段。 参数: 参数名称 参数描述 name 可序列化字段的名称...

鸿蒙OS ObjectOutputStream

ObjectOutputStream java.lang.Object |—java.io.OutputStream |—|—java.io.ObjectOutputStream public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants ObjectOutputStream 将 Java 对象的原始数据类型和图形写入 OutputStream。 可以使用 ObjectInputStream 读取(重构)对象。 对象的持久存储可以通过使用流的文件来实现。 如果流是网络套接字流,则可以在另一个主机或另一个进程中重构对象。 只有支持 java.io.Serializable 接口的对象才能写入流。 每个可序列化对象的类都经过编码,包括类的类名和签名、对象的字段和数组的值,以及从初始对象引用的任何其他对象的闭包。 writeObject 方法用于将对象写入流。任何对象,包括字符串和数组,都是用 writeObject 编写的。可以将多个对象或原语写入流。对象必须从相应的 ObjectInputstream 以与写入时相同的类型和相同的顺序读回。 原始数据类型也可以使用 DataOutput 中的适当方法写入流。也可以使用 writeUTF 方法写入字符串。 对象的默认序列化机制写入对象的类、类签名以及所有非瞬态和非静态字段的值。对其他对象的引用(瞬态或静态字段除外)也会导致这些对象被写入。使用引用共享机制对单个对象的多个引用进行编码,以便对象的图形可以恢复到与原始对象写入时相同的形状。 比如写一个ObjectInputStream中的例子可以读取的对象: FileOutputStream fos = new FileOutputStream("t.tmp"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeInt(12345); oos.writeObject("Today"); oos.writeObject(new Date()); oos.close(); 在序列化和反序列化过程中需要特殊处理的类必须实现具有这些确切签名的特殊方法: private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException; private void writeObject(java.io.ObjectOutputStream stream) throws IOException private void readObjectNoData() throws ObjectStreamException; writeObject 方法负责为其特定类写入对象的状态,以便相应的 readObject 方法可以恢复它。该方法不需要关注属于对象的超类或子类的状态。通过使用 writeObject 方法或使用 DataOutput 支持的原始数据类型的方法将各个字段写入 ObjectOutputStream 来保存状态。 序列化不会写出任何未实现 java.io.Serializable 接口的对象的字段。不可序列化的对象的子类可以是可序列化的。在这种情况下,不可序列化的类必须有一个无参数的构造函数来允许其字段被初始化。在这种情况下,子类负责保存和恢复不可序列化类的状态。通常情况下,该类的字段是可访问的(公共的、包的或受保护的),或者存在可用于恢复状态的 get 和 set 方法。 可以通过实现抛出 NotSerializableException 的 writeObject 和 readObject 方法来防止对象的序列化。异常将被 ObjectOutputStream 捕获并中止序列化过程。 实现 Externalizable 接口允许对象完全控制对象序列化形式的内容和格式。调用 Externalizable 接口的方法 writeExternal 和 readExternal 来保存和恢复对象状态。当由一个类实现时,它们可以使用 ObjectOutput 和 ObjectInput 的所有方法写入和读取自己的状态。对象负责处理发生的任何版本控制。 枚举常量的序列化方式与普通的可序列化或可外部化对象不同。枚举常量的序列化形式仅由其名称组成;不传输常量的字段值。为了序列化枚举常量,ObjectOutputStream 写入常量的 name 方法返回的字符串。与其他可序列化或可外部化的对象一样,枚举常量可以充当随后出现在序列化流中的反向引用的目标。无法自定义枚举常量序列化的过程;在序列化过程中,枚举类型定义的任何类特定的 writeObject 和 writeReplace 方法都会被忽略。同样,任何...

鸿蒙OS ObjectInputStream.GetField

ObjectInputStream.GetField java.lang.Object |—java.io.ObjectInputStream.GetField public abstract static class ObjectInputStream.GetField extends Object 提供对从输入流中读取的持久字段的访问。 构造函数摘要 构造函数 描述 GetField() 方法总结 修饰符和类型 方法 描述 abstract boolean defaulted(String name) 如果命名字段是默认的并且在此流中没有值,则返回 true。 abstract boolean get(String name, boolean val) 从持久字段中获取命名布尔字段的值。 abstract byte get(String name, byte val) 从持久字段中获取命名字节字段的值。 abstract char get(String name, char val) 从持久字段中获取命名字符字段的值。 abstract double get(String name, double val) 从持久字段中获取命名双字段的值。 abstract float get(String name, float val) 从持久字段中获取命名浮点字段的值。 abstract int get(String name, int val) 从持久字段中获取命名的 int 字段的值。 abstract long get(String name, long val) 从持久字段中获取命名长字段的值。 abstract short get(String name, short val) 从持久字段中获取命名短字段的值。 abstract Object get(String name, Object val) 从持久字段中获取命名对象字段的值。 abstract ObjectStreamClass getObjectStreamClass() 获取描述流中字段的 ObjectStreamClass。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 构造函数详细信息 GetField public GetField() 方法详情 getObjectStreamClass public abstract ObjectStreamClass getObjectStreamClass() 获取描述流中字段的 ObjectStreamClass。 返回: 描述可序列化字段的描述符类 defaulted public abstract boolean defaulted(String name) throws IOException 如果命名字段是默认的并且在此流中没有值,则返回 true。 参数: 参数名称 参数描述 name 字段名称 返回: true,当且仅当命名字段是默认的 Throws: Throw名称 Throw描述 IOException 如果从底层 InputStream 读取时出现 I/O 错误 IllegalArgumentException 如果名称不对应于可序列化的字段 get public abstract boolean get(String name, boolean val) throws IOException 从持久字段中获取命名布尔字段的值。 参数: 参数名称 参数描述 name 字段名称 val 如果 name 没有值,则使用默认值 返回: 命名布尔字段的值 Throws: Throw名称 Throw描述 IOException 如果从底层 InputStream 读取时出现 I/O 错误 IllegalArgumentException...

鸿蒙OS ObjectInputStream

ObjectInputStream java.lang.Object |—java.io.InputStream |—|—java.io.ObjectInputStream public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants ObjectInputStream 反序列化以前使用 ObjectOutputStream 编写的原始数据和对象。 当分别与 FileOutputStream 和 FileInputStream 一起使用时,ObjectOutputStream 和 ObjectInputStream 可以为应用程序提供对象图的持久存储。 ObjectInputStream 用于恢复之前序列化的那些对象。 其他用途包括使用套接字流在主机之间传递对象或在远程通信系统中编组和解组参数和参数。 ObjectInputStream 确保从流创建的图中所有对象的类型与 Java 虚拟机中存在的类匹配。 使用标准机制根据需要加载类。 只有支持 java.io.Serializable 或 java.io.Externalizable 接口的对象才能从流中读取。 readObject 方法用于从流中读取对象。 应该使用 Java 的安全转换来获得所需的类型。 在 Java 中,字符串和数组是对象,在序列化过程中被视为对象。 读取时需要将它们转换为预期的类型。 可以使用 DataInput 上的适当方法从流中读取原始数据类型。 对象的默认反序列化机制将每个字段的内容恢复为写入时的值和类型。反序列化过程会忽略声明为瞬态或静态的字段。对其他对象的引用会导致根据需要从流中读取这些对象。使用参考共享机制正确恢复对象图。反序列化时总是分配新对象,这样可以防止现有对象被覆盖。 读取对象类似于运行新对象的构造函数。为对象分配内存并初始化为零 (NULL)。为不可序列化类调用无参数构造函数,然后从流中恢复可序列化类的字段,从最接近 java.lang.object 的可序列化类开始,到对象最具体的类结束。 例如,从 ObjectOutputStream 中的示例编写的流中读取: FileInputStream fis = new FileInputStream("t.tmp"); ObjectInputStream ois = new ObjectInputStream(fis); int i = ois.readInt(); String today = (String) ois.readObject(); Date date = (Date) ois.readObject(); ois.close(); 类通过实现 java.io.Serializable 或 java.io.Externalizable 接口来控制它们的序列化方式。 实现 Serializable 接口允许对象序列化保存和恢复对象的整个状态,它允许类在写入流和读取流之间演变。 它自动遍历对象之间的引用,保存和恢复整个图形。 在序列化和反序列化过程中需要特殊处理的可序列化类应实现以下方法: private void writeObject(java.io.ObjectOutputStream stream) throws IOException; private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException; private void readObjectNoData() throws ObjectStreamException; readObject 方法负责使用由相应的 writeObject 方法写入流的数据读取和恢复其特定类的对象状态。该方法不需要关注属于其超类或子类的状态。通过从 ObjectInputStream 读取各个字段的数据并对对象的适当字段进行分配来恢复状态。 DataInput 支持读取原始数据类型。 任何超出相应 writeObject...

鸿蒙OS LineNumberReader

LineNumberReader java.lang.Object |—java.io.Reader |—|—java.io.BufferedReader |—|—|—java.io.LineNumberReader public class LineNumberReader extends BufferedReader 跟踪行号的缓冲字符输入流。 该类定义了 setLineNumber(int) 和 getLineNumber() 方法,分别用于设置和获取当前行号。 默认情况下,行号从 0 开始。随着数据的读取,该数字在每个行终止符处递增,并且可以通过调用 setLineNumber(int) 来更改。 但是请注意, setLineNumber(int) 实际上并没有改变流中的当前位置; 它只会更改 getLineNumber() 将返回的值。 一行被认为是由换行符 (‘\n’)、回车符 (‘\r’) 或紧跟换行符的回车符中的任何一个终止的。 Since: JDK1.1 字段摘要 从类 java.io.Reader 继承的字段 lock 构造函数摘要 构造函数 描述 LineNumberReader(Reader in) 使用默认输入缓冲区大小创建一个新的行号阅读器。 LineNumberReader(Reader in, int sz) 创建一个新的行号阅读器,将字符读入给定大小的缓冲区。 方法总结 修饰符和类型 方法 描述 int getLineNumber() 获取当前行号。 void mark(int readAheadLimit) 标记流中的当前位置。 int read() 读取单个字符。 int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。 String readLine() 阅读一行文字。 void reset() 将流重置为最新标记。 void setLineNumber(int lineNumber) 设置当前行号。 long skip(long n) 跳过字符。 从类 java.io.BufferedReader 继承的方法 close, lines, markSupported, ready 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 从类 java.io.Reader 继承的方法 read, read 构造函数详细信息 LineNumberReader public LineNumberReader(Reader in) 使用默认输入缓冲区大小创建一个新的行号阅读器。 参数: 参数名称 参数描述 in 提供底层流的 Reader 对象 LineNumberReader public LineNumberReader(Reader in, int sz) 创建一个新的行号阅读器,将字符读入给定大小的缓冲区。 参数: 参数名称 参数描述 in 提供底层流的 Reader 对象 sz 指定缓冲区大小的 int 方法详情 setLineNumber public void setLineNumber(int lineNumber) 设置当前行号。 参数: 参数名称 参数描述...

鸿蒙OS LineNumberInputStream

LineNumberInputStream java.lang.Object |—java.io.InputStream |—|—java.io.FilterInputStream |—|—|—java.io.LineNumberInputStream @Deprecated public class LineNumberInputStream extends FilterInputStream 已弃用。 此类错误地假定字节足以表示字符。 从 JDK 1.1 开始,对字符流进行操作的首选方式是通过新的字符流类,其中包括一个用于计算行号的类。 Since: JDK1.0 字段摘要 从类 java.io.FilterInputStream 继承的字段 in 构造函数摘要 构造函数 描述 LineNumberInputStream(InputStream in) 已弃用。 构造一个换行符输入流,该流从指定的输入流中读取其输入。 方法总结 修饰符和类型 方法 描述 int available() 已弃用。 返回可以不阻塞地从此输入流中读取的字节数。 int getLineNumber() 已弃用。 返回当前行号。 void mark(int readlimit) 已弃用。 标记此输入流中的当前位置。 int read() 已弃用。 从此输入流中读取数据的下一个字节。 int read(byte[] b, int off, int len) 已弃用。 从此输入流中读取最多 len 个字节的数据到一个字节数组中。 void reset() 已弃用。 将此流重新定位到最后一次在此输入流上调用标记方法时的位置。 void setLineNumber(int lineNumber) 已弃用。 将行号设置为指定的参数。 long skip(long n) 已弃用。 跳过并丢弃此输入流中的 n 字节数据。 从类 java.io.FilterInputStream 继承的方法 close, markSupported, read 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 构造函数详细信息 LineNumberInputStream public LineNumberInputStream(InputStream in) 已弃用。 构造一个换行符输入流,该流从指定的输入流中读取其输入。 参数: 参数名称 参数描述 in 底层输入流。 方法详情 read public int read() throws IOException 已弃用。 从此输入流中读取数据的下一个字节。 值字节作为 int 返回,范围为 0 到 255。如果由于到达流的末尾而没有可用的字节,则返回值 -1。 此方法会一直阻塞,直到输入数据可用、检测到流结束或引发异常。 LineNumberInputStream 的 read 方法调用底层输入流的 read 方法。 它检查输入中的回车符和换行符,并根据需要修改当前行号。 回车符或后跟换行符的回车符都转换为单个换行符。 覆盖: 读入类 FilterInputStream 返回: 数据的下一个字节,如果到达此流的末尾,则为 -1。 Throws: Throw名称 Throw描述 IOException 如果发生 I/O 错误。 read public int read(byte[] b, int off,...

鸿蒙OS InputStreamReader

InputStreamReader java.lang.Object |—java.io.Reader |—|—java.io.InputStreamReader public class InputStreamReader extends Reader InputStreamReader 是从字节流到字符流的桥梁:它读取字节并使用指定的字符集将它们解码为字符。 它使用的字符集可以由名称指定,也可以显式给出,或者可以接受平台的默认字符集。 InputStreamReader 的 read() 方法之一的每次调用都可能导致从底层字节输入流中读取一个或多个字节。 为了实现字节到字符的有效转换,可以从底层流中预先读取比满足当前读取操作所需的更多的字节。 为了获得最高效率,请考虑将 InputStreamReader 包装在 BufferedReader 中。 例如: BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); Since: JDK1.1 字段摘要 从类 java.io.Reader 继承的字段 lock 构造函数摘要 构造函数 描述 InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。 InputStreamReader(InputStream in, String charsetName) 创建一个使用命名字符集的 InputStreamReader。 InputStreamReader(InputStream in, Charset cs) 创建一个使用给定字符集的 InputStreamReader。 InputStreamReader(InputStream in, CharsetDecoder dec) 创建一个使用给定字符集解码器的 InputStreamReader。 方法总结 修饰符和类型 方法 描述 void close() 关闭流并释放与其关联的任何系统资源。 String getEncoding() 返回此流使用的字符编码的名称。 int read() 读取单个字符。 int read(char[] cbuf, int offset, int length) 将字符读入数组的一部分。 boolean ready() 告诉这个流是否准备好被读取。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 从类 java.io.Reader 继承的方法 mark, markSupported, read, read, reset, skip 构造函数详细信息 InputStreamReader public InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。 参数: 参数名称 参数描述 in 输入流 InputStreamReader public InputStreamReader(InputStream in, String charsetName) throws UnsupportedEncodingException 创建一个使用命名字符集的 InputStreamReader。 参数: 参数名称 参数描述 in 输入流 charsetName 支持的字符集的名称 Throws: Throw名称 Throw描述 UnsupportedEncodingException 如果不支持命名字符集 InputStreamReader public InputStreamReader(InputStream in, Charset cs) 创建一个使用给定字符集的 InputStreamReader。 参数: 参数名称 参数描述 in...

鸿蒙OS InputStream

InputStream java.lang.Object |—java.io.InputStream public abstract class InputStream extends Object implements Closeable 这个抽象类是代表字节输入流的所有类的超类。 需要定义 InputStream 子类的应用程序必须始终提供返回下一个输入字节的方法。 Since: JDK1.0 构造函数摘要 构造函数 描述 InputStream() 方法总结 修饰符和类型 方法 描述 int available() 返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。 void close() 关闭此输入流并释放与该流关联的所有系统资源。 void mark(int readlimit) 标记此输入流中的当前位置。 boolean markSupported() 测试此输入流是否支持 mark 和 reset 方法。 abstract int read() 从输入流中读取数据的下一个字节。 int read(byte[] b) 从输入流中读取一些字节并将它们存储到缓冲区数组 b. int read(byte[] b, int off, int len) 从输入流中读取最多 len 个字节的数据到一个字节数组中。 void reset() 将此流重新定位到最后一次在此输入流上调用标记方法时的位置。 long skip(long n) 跳过并丢弃此输入流中的 n 字节数据。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 构造函数详细信息 InputStream public InputStream() 方法详情 read public abstract int read() throws IOException 从输入流中读取数据的下一个字节。 值字节作为 int 返回,范围为 0 到 255。如果由于到达流的末尾而没有可用的字节,则返回值 -1。 此方法会一直阻塞,直到输入数据可用、检测到流结束或引发异常。 子类必须提供此方法的实现。 返回: 数据的下一个字节,如果到达流的末尾,则为 -1。 Throws: Throw名称 Throw描述 IOException 如果发生 I/O 错误。 read public int read(byte[] b) throws IOException 从输入流中读取一些字节并将它们存储到缓冲区数组 b. 实际读取的字节数以整数形式返回。 在输入数据可用、检测到文件结尾或引发异常之前,此方法会一直阻塞。 如果 b 的长度为零,则不读取任何字节并返回 0; 否则,将尝试读取至少一个字节。 如果由于流位于文件末尾而没有可用字节,则返回值 -1; 否则,至少读取一个字节并将其存储到 b 中。 读取的第一个字节存储在元素 b[0] 中,下一个字节存储在 b[1] 中,依此类推。 读取的字节数最多等于 b 的长度。 设 k 为实际读取的字节数; 这些字节将存储在元素 b[0]...

鸿蒙OS FilterWriter

FilterWriter java.lang.Object |—java.io.Writer |—|—java.io.FilterWriter public abstract class FilterWriter extends Writer 用于编写过滤字符流的抽象类。 抽象类 FilterWriter 本身提供了将所有请求传递给包含的流的默认方法。 FilterWriter 的子类应该覆盖其中的一些方法,并且还可以提供额外的方法和字段。 Since: JDK1.1 字段摘要 修饰符和类型 字段 描述 protected Writer out 底层字符输出流。 从类 java.io.Writer 继承的字段 lock 构造函数摘要 修饰符 构造函数 描述 protected FilterWriter(Writer out) 创建一个新的过滤 writer。 方法总结 修饰符和类型 方法 描述 void close() 关闭流,首先刷新它。 void flush() 冲洗流。 void write(char[] cbuf, int off, int len) 写入字符数组的一部分。 void write(int c) 写入单个字符。 void write(String str, int off, int len) 写入字符串的一部分。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 从类 java.io.Writer 继承的方法 append, append, append, write, write 字段详细信息 out protected Writer out 底层字符输出流。 构造函数详细信息 FilterWriter protected FilterWriter(Writer out) 创建一个新的过滤 writer。 参数: 参数名称 参数描述 out 提供底层流的 Writer 对象。 Throws: Throw名称 Throw描述 NullPointerException 如果 out 为空 方法详情 write public void write(int c) throws IOException 写入单个字符。 覆盖: 在 Writer 类中写 参数: 参数名称 参数描述 c int 指定要写入的字符 Throws: Throw名称 Throw描述 IOException 如果发生 I/O 错误 write public void write(char[] cbuf, int off, int len) throws IOException...

鸿蒙OS FilterReader

FilterReader java.lang.Object |—java.io.Reader |—|—java.io.FilterReader public abstract class FilterReader extends Reader 用于读取过滤字符流的抽象类。 抽象类 FilterReader 本身提供了将所有请求传递给包含的流的默认方法。 FilterReader 的子类应该覆盖其中的一些方法,并且还可以提供额外的方法和字段。 Since: JDK1.1 字段摘要 修饰符和类型 字段 描述 protected Reader in 底层字符输入流。 从类 java.io.Reader 继承的字段 lock 构造函数摘要 修饰符 构造函数 描述 protected FilterReader(Reader in) 创建一个新的过滤阅读器。 方法总结 修饰符和类型 方法 描述 void close() 关闭流并释放与其关联的任何系统资源。 void mark(int readAheadLimit) 标记流中的当前位置。 boolean markSupported() 告知此流是否支持 mark() 操作。 int read() 读取单个字符。 int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。 boolean ready() 告诉这个流是否准备好被读取。 void reset() 重置流。 long skip(long n) 跳过字符。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 从类 java.io.Reader 继承的方法 read, read 字段详细信息 in protected Reader in 底层字符输入流。 构造函数详细信息 FilterReader protected FilterReader(Reader in) 创建一个新的过滤阅读器。 参数: 参数名称 参数描述 in 提供底层流的 Reader 对象。 Throws: Throw名称 Throw描述 NullPointerException 如果 in 为空 方法详情 read public int read() throws IOException 读取单个字符。 覆盖: read in class Reader 返回: 读取的字符,为 0 到 65535 (0x00-0xffff) 范围内的整数,如果已到达流的末尾,则为 -1 Throws: Throw名称 Throw描述 IOException 如果发生 I/O 错误...