举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > java阅读器和写入器的区别 Java 阅读器和写入器

java阅读器和写入器的区别 Java 阅读器和写入器

2023-04-11 22:20 Java教程

java阅读器和写入器的区别 Java 阅读器和写入器

java阅读器和写入器的区别

Java阅读器和写入器是Java编程中常用的两种输入/输出流,它们之间有一些明显的区别。

首先,Java阅读器是一种只读流,它可以从文件或字符串中读取数据,但不能写入数据。而Java写入器是一种可写流,它可以将数据写入文件或字符串中,但不能读取数据。

此外,Java阅读器使用的是字节流,而Java写入器使用的是字符流。因此,当使用Java阅读器时,必须将字节流转换为字符流才能正常工作。而使用Java写入器时,必须将字符流转换为字节流才能正常工作。

最后,Java阅读器通常由InputStreamReader来实现;而Java写入器通常由OutputStreamWriter来实现。因此,在使用过程中应根据不同的情况选择不同的实现方式。

 
// Java 阅读器 代码 
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
String line = br.readLine(); 
System.out.println("You entered: " + line); 

 // Java 写入器代码 
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); 
bw.write("Hello World!"); 
bw.flush();   // 刷新输出   

Java 阅读器和写入器

Java IO教程 - Java阅读器和写入器


Java阅读器和写入器是基于字符的流。

当我们要从数据源读取基于字符的数据时,使用读取器。当我们想要写基于字符的数据时使用写入器。

如果我们有一个流提供字节,我们想通过将这些字节解码为字符读取字符,我们应该使用InputStreamReader类。

例如,如果我们有一个名为iso的InputStream对象,并且我们想要获取一个Reader对象实例,我们可以这样做:

Reader  reader = new InputStreamReader(iso);

如果我们知道在基于字节的流中使用的编码,我们可以在创建Reader对象时指定它,如下所示:

Reader  reader = new InputStreamReader(iso,  "US-ASCII");

类似地,我们可以创建一个Writer对象,从基于字节的输出流中吐出字符,如下所示,假设oso是一个OutputStream对象:

以下代码使用平台默认编码从OutputStream创建Writer对象。

Writer writer  = new OutputStreamWriter(oso);

使用“US-ASCII"编码从OutputStream创建Writer对象

Writer writer  = new OutputStreamWriter(oso,  "US-ASCII");

样本

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class Main {
  public static void main(String[] args) {
    String destFile = "test.txt";

    try (BufferedWriter bw = new BufferedWriter(new FileWriter(destFile))) {
      bw.append("test");
      bw.newLine();
      bw.append("test1");
      bw.newLine();
      bw.append("test2");
      bw.newLine();
      bw.append("test3");
      
      bw.flush();
    }  catch (Exception e2) {
      e2.printStackTrace();
    }
  }
}

以下代码从test.txt文件中读取文本。

import java.io.BufferedReader;
import java.io.FileReader;

public class Main {
  public static void main(String[] args) throws Exception{
    String srcFile = "test.txt";
    BufferedReader br = new BufferedReader(new FileReader(srcFile));
    String text = null;

    while ((text = br.readLine()) != null) {
      System.out.println(text);
    }
    br.close();
  }
}

将基于字节的流转换为基于字符的流是直接的。

如果我们有一个InputStream对象,我们可以通过将它包装在InputStreamReader对象中来获取一个Reader对象,如下所示:

InputStream is = create your  InputStream object here; 
Reader  reader = new InputStreamReader(is);

要从InputStream对象构造BufferedReader对象,我们可以这样做:

InputStream is = create your  InputStream object here; 
BufferedReader br  = new BufferedReader(new InputStreamReader(is));

我们可以从OutputStream对象构造一个Writer对象,如下所示:

OutputStream os  = create your  OutputStream object here; Writer writer  = new OutputStreamWriter(os);

例子

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.Reader;
import java.io.FilterReader;
import java.io.IOException;

class LowerCaseReader extends FilterReader {
  public LowerCaseReader(Reader in) {
    super(in);
  }
  @Override
  public int read(char[] cbuf, int off, int len) throws IOException {
    int count = super.read(cbuf, off, len);
    if (count != -1) {
      // Convert all read characters to lowercase 
      int limit = off + count;
      for (int i = off; i < limit; i++) {
        cbuf[i] = Character.toLowerCase(cbuf[i]);
      }
    }
    return count;
  }
}
public class Main {
  public static void main(String[] args) throws Exception {
    String fileName = "test.txt";
    LowerCaseReader lcr = new LowerCaseReader(new FileReader(fileName));
    int c = -1;
    while ((c = lcr.read()) != -1) {
      System.out.print((char) c);
    }
    lcr.close();
    BufferedReader br = new BufferedReader(new LowerCaseReader(new FileReader(
        fileName)));
    String str = null;
    while ((str = br.readLine()) != null) {
      System.out.println(str);
    }
    br.close();
  }
}

上面的代码生成以下结果。


阅读全文
以上是名动网为你收集整理的java阅读器和写入器的区别 Java 阅读器和写入器全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 名动网 mdwl.vip 版权所有 联系我们