I/O 流的使用

来源:互联网 发布:mac怎么恢复出厂设置 编辑:程序博客网 时间:2024/04/29 06:58

介绍了流的分类之后,我们知道了如果想使用流,就需要在InputStream上加入一定的修饰器来进行操作。那么现在就来看一下通常我们是如何来使用流来进行操作的。

看例子:

 

  • readByLines方法展示了使用缓冲区来按照行来读取文件。
  • readStandardInput方法演示了如何从控制台读取数据。
  • inputFromMemory演示了如何从内存,也就是字符串中读取数据。
  • inputFromArray演示了如果需要把字符串格式化byte[]数组的情况下应该如何构建输入流。这里在读取的时候使用了两种方式,一中是借助了异常来判断终结的,是不好的。另外一种是使用了available()方法来判断是否还有未读取的内容。应该使用这种方式。另外因为程序是读取了字节的,对于字符类型的数据有可能会产生乱码,例子中给出了一种解决乱码的形式。就是把其重新存为btye数组,然后使用String的构造函数,得到原来的内容。
  • outputToFile方法演示了如何把信息打印到文件中,这样可以作为记录日志的方式,用来得到日志文件进行分析。
  • storingData方法演示了如何输出一个可供另外一个流进行恢复的数据。这里必须使用DataOutputStream。java保证我们使用DataOutput输出的文件不管在什么平台上都能够通过DataInput进行还原读取。当我们需要写入字符串的时候,为了能够正确的恢复必须的方法是使用UTF-8编码。即使用writeUTF()来写入。
  • 单独说一下UTF-8编码,它是Unicode的变体。后者把所有的字符都存储成两个字节的形式。但是当我们使用大部分的字符为ASCII字符的时候这个做法就会浪费了空间,而UTF-8会把ASCII字符编码成单一字节,而非ASCII字符则编码成多个字节的形式。java程序中使用的readUTF()方法都是使用的适合java的UTF-8的变体,因此非java程序读取java程序写入的文件时,有可能存在问题。
  • 另外我们还能够使用writerDouble()等方法写入别的数据。但是当读取的时候我们需要确切知道每个数据的位置,否则有可能导致错误。最好的保持这个格式的方法就是对象序列化。后面会介绍。
  • randomAccessFile方法演示了一个文件随机读写的例子。我们能够使用seek()方法到处移动位置,或者修改文件中的某个值。

 

标准I/O

就是java中自带的System.out,System.in,System.err。他们都是实现了标准I/O模型的,一种输出可以作为其他程序或者设备的输入。

看例子:

  • readFromConsole方法演示了一次一行的从控制台读取输入。
  • printByWriter方法演示了如何把一个PrintStream转化为PrintWriter.
  • redirect演示了标准I/O重定向。 通过System.setIn()等方法能够把输出从新定位到文件,这样就能够防止后台有大量的打印操作了。

 

原创粉丝点击