1、Java SE应用部分30Java IO操作04Java SE应用部分-30.Java IO操作(04)上季内容回顾:System.out - PrintStream的一个实例化对象,本身具备了向屏幕上打印的功能,之后又讲解了可以使用OutputStream类向屏幕上进行输出的实例。本季目标: 1、System.in 2、缓冲流 3、对象序列化System.in对应的是键盘的输入 public static final InputStream in 只是现在不是像之前那样是从文件中读了,而是从键盘上读数据了。看下效果:以上的程序虽然可以输入内容,但是会存在一个问题: 首先程序开辟了一段空间,如
2、果现在假设输入的内容大于开辟的空间,那会如何呢?看下效果:如果要是长度大于设置好的长度,则肯定有内容无法读取进来,最好的方法就是给不设置长度,如果有内容就继续读。看下效果:采用判断是否读到底的方式完成,确实没有长度的限制了,但是也存在了另外一个问题如果输入中文,则肯定出现乱码? 最好的解决方法是设置一个缓冲区,所有的内容放到缓冲区中一次性读出来。 此缓冲区最好是为字符缓冲区 BufferedReader public BufferedReader(Reader in) 此处必须接收一个Reader的对象,但是System.in实际上是InputStream类的对象字节流与字符流的转换Reade
3、r和Writer本身使用到了缓冲:Writer - OutputStreamWriter - FileWriter结论: 在物理上存放的肯定永远是字节流 读到程序之中才会形成字符流得出完整的输入数据的代码形式:现在看下最终效果:以上为标准的格式,我们现在使用此种格式完成一个功能,输入两个整数之后计算两个数字的相加结果。字符集GBK:是包含了简体中文和繁体中文的字库 GB2312:是只包含了简体中文的字库 ISO8859-1:是一个国际的通用编码 在系统中都有一个默认的编码方式。 如果知道当前系统的默认编码呢?接着看下面哈默认的编码方式就是GBK,那么问,如果现在系统的编码为GBK,而我使用IS
4、O 进行编码,能正确解释出来吗?字符乱码怎么解决 跟系统设置的编码一致就OK了。SequenceInputStream类SequenceInputStream用于文件合并看下合并后的效果:对象序列化实际上使用的是两个类: ObjectOutputStream ObjectInputStreamSerializable接口的作用: 只是一个标识接口,表示你这个类的对象允许被序列化 ObjectOutputStream类的构造方法,接收一个OutputStream类的实例化对象,以表示到底向那里保存。 public final void writeObject(Object obj) throws
5、 IOExceptionObjectInputStream类的构造方法 public final Object readObject() throws IOException,ClassNotFoundException下面进行反序列化(从文件中恢复对象)看下效果:从文件中读取对象对象序列化实际上更准确的来说指的是对象可以变为字节流。transient关键字当不希望类中的某个字段被序列化的时候,应用transient表示这个字段看下效果:总结 OutputStream:字节的输出流类 |- FileOutputStream |- ObjectOutputStream |- ByteArrayO
6、utputStream |- PipedOutputStream |- PrintStream InputStream:字节的输入流类 |- FileInputStream |- ObjectInputStream |- ByteArrayInputStream |- PipedInputStream Reader:字符流的输入类 |- InputStreamReader |- FileReader |- BufferedReader Writer:字符流的输出类 |- OutputStreamWriter |- FileWriter |- PrintWirter File类: Serializable接口#
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1