Java文件操作中流编码格式的设定 及 嵌套流的使用

文件读操作:

BufferedReader:

可以从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。也可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,我们都是使用默认值。通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader操作(如 FileReader 和 InputStreamReader)。例如,

[html] view plaincopy

  1. BufferedReader in  

  2.    = new BufferedReader(new FileReader("foo.in"));  

将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。

若要指定编码方式可以使用以下方式:

[html] view plaincopy

  1. BufferedReader in = new BufferedReader(  

  2.     new InputStreamReader(new FileInputStream(saveFilename),"GB2312"));  

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。

使用InputStreamReader包装FileInutStream不仅可以提高效率,还可以指定特定的编码方式。

文件写操作:

BufferedWriter:

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,我们都使用默认值。该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性line.separator 定义。并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。通常 Writer 将其输出立即发送到底层字符或字节流。除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)。例如,

[html] view plaincopy

  1. PrintWriter out  

  2.    = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));  

将缓冲 PrintWriter 对文件的输出。如果没有缓冲,则每次调用 print() 方法会导致将字符转换为字节,然后立即写入到文件,而这是极其低效的。 

若要指定编码方式可以使用以下方式:

[html] view plaincopy

  1. PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(  

  2.     new FileOutputStream(saveFilename),"GB2312")));  

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。

同理,这样不仅可以提高效率,而且还可以指定特定的编码方式。


转载于:https://my.oschina.net/gxs2012/blog/317881

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中,(Stream)是一种用于操作集合(Collections)或数组的抽象概念。它提供了一种统一的、畅的操作方式,可以对数据进行过滤、映射、排序、聚合等操作,使得代码更加简洁和可读。 使用通常可以分为以下几个步骤: 1. 创建:可以通过集合、数组、文件等方式创建对象。常见的创建方式包括 `stream()` 方法、`Arrays.stream()` 方法和 `Files.lines()` 方法等。 2. 中间操作支持一系列的中间操作,用于对数据进行转换、过滤等操作,这些操作都会返回一个新的。常见的中间操作包括 `filter()`、`map()`、`sorted()`、`distinct()` 等。 3. 终端操作:终端操作是对进行最终的处理操作,它会产生一个结果或者一个副作用。常见的终端操作包括 `forEach()`、`collect()`、`reduce()`、`count()` 等。终端操作的触发点,执行终端操作后,将不可再次使用。 下面是一个示例代码,展示了如何使用对集合进行筛选和转换: ```java List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); List<Integer> evenSquares = numbers.stream() .filter(n -> n % 2 == 0) // 筛选偶数 .map(n -> n * n) // 平方 .collect(Collectors.toList()); // 转换为列表 System.out.println(evenSquares); // 输出 [4, 16, 36, 64, 100] ``` 在这个示例中,我们首先通过 `stream()` 方法创建了一个,然后使用 `filter()` 方法筛选出偶数,接着使用 `map()` 方法对每个元素进行平方操作,最后使用 `collect()` 方法将结果收集到一个列表中。 通过使用,我们可以以一种更简洁和链式的方式对集合进行操作,提高了代码的可读性和可维护性。同时,还提供了并行处理的能力,可以充分利用多核处理器的性能优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值