在使用IO流时该选择何种流对象

在使用IO流时该选择何种对象是很多人的一个问题。一下通过一个判断顺序和案例来回答这个问题

一:先介绍简单介绍一下流

流可以分为字符流和字节流两种类型

  字节流对应InputSteam(输入流)和OutStream(输出流)。

  字符流对应Reader(输入流)和Writer(输出流)。

二:现在介绍选择规则

  (1)通过设备输入流

    若输入流是字节则选择InputStream。

    若输入流是纯文本则选择Reader。

  (2)通过设备判断输出流

    若输出流是字节,则选择outputstream。

    若输出流是纯文本,则选择Writer。

三:现在运用一个例子来表现上面的规则

  需求:将一个文本文件的内容通过控制台打印出来。

  1.文本文件是一个纯文本文件

   所以输入流是Reader

   在Reader中操作文件的类是FileReader

   所以FileReader fd = new FileReader("123.txt");

   若要提高读取效率,则使用缓冲区

   所以BufferedReader brd = new BufferedReader(reader);

2.以为读取的是纯文本,所以输出流使用Writer

     而控制台的输出System.out是一个字节流

   所以需要把字符流装换为字节流进行输出

   所以选择转换流 OutputStreamWriter

   OutputStreamWriter  out = new OutputStreamWriter(System.in);

   若要提高效率,则使用BufferedWriter

   所以:BufferedWriter brw = new BufferedWriter(out);

以下是代码示例

 1 package com.sjj.io;
 2
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.FileReader;
 6 import java.io.IOException;
 7 import java.io.OutputStreamWriter;
 8
 9 public class Test01 {
10
11
12     public static void main(String[] args){
13         BufferedReader brd = null;
14         BufferedWriter brw = null;
15         try {
16             brd = new BufferedReader(new FileReader("d:\\fileIo.txt"));
17             brw = new BufferedWriter(new OutputStreamWriter(System.out));
18             String str = null;
19             while((str = brd.readLine()) != null){
20                 brw.write(str);
21                 brw.newLine();
22                 brw.flush();
23             }
24         } catch (IOException e) {
25             // TODO Auto-generated catch block
26             e.printStackTrace();
27         }finally{
28             if (brd != null) {
29                 try {
30                     brd.close();
31                 } catch (IOException e) {
32                     // TODO Auto-generated catch block
33                     e.printStackTrace();
34                 }
35             }
36             if (brd != null) {
37                 try {
38                     brw.close();
39                 } catch (IOException e) {
40                     // TODO Auto-generated catch block
41                     e.printStackTrace();
42                 }
43             }
44         }
45
46     }
47
48 }

时间: 2024-08-06 11:56:54

在使用IO流时该选择何种流对象的相关文章

【Java IO流】字节流和字符流详解

字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作——也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3.从流的内容来讲,有字节和字符之分. 这篇文章先后讲解IO流中的字节流和字符流的输入和输出操作. 一.字节流 1)输入和输出流 首先,字节流要进行读和写,也就是输入和输出,所以它有两个抽象的父类InputStream.OutputStream. InputStream抽象了应用程序读取数据的方式,即

hdoj 4322 Candy 【最大费用最大流】【经典题目】【最大流时 维护费用的最大效益】

Candy Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1829    Accepted Submission(s): 500 Problem Description There are N candies and M kids, the teacher will give this N candies to the M kids.

J2SE知识点归纳笔记(七)---Java IO Part 4:基本字符流

J2SE知识点归纳笔记(七)---Java IO Part 4:基本字符流                                                                 --转载请注明出处:coder-pig 本节引言: 上一节中,我们对于Java IO流中的一些基本字节流进行了学习,他们都是InputStream与 OutputStream的子类;本节学习的字符流则是Reader与Writer的子类,好了,话不多说, 开始本节内容! 本节正文: 1.Reade

Java之 IO流、字符流、字节流、缓冲流、对象流等各种流

File类:使用Java进行操作文件,通过一些方法进行操作.比如创建文件,删除文件,判断是否存在,文件大小,文件的目录等等,还有文件夹的一些操作. IO流:根据类别可以进行分类. 按照流向:输入流Input 输出流Output 按照字节个数:字节流和字符流 字节流: InputStream:抽象类,无法直接使用,通过其子类FileInputStream,从文件中获取字节. OutputStream:抽象类,无法直接使用,通过其子类FileOutputStream,向文件写入字节. 字符流: Re

Java基础—IO小结(二)缓冲流与其它流的使用

一.缓冲流的使用 每个字节流都有对应的缓冲流: BufferedInputStream / BufferedOutputStream 构造器: 方法摘要与对应节点流类似 使用缓冲流实现文件复制:实际中也是:其中流的关闭只需要关闭缓冲流,内部嵌套的字节流会自动关闭. @Test public void testBuffered1() { // 同样需要先关联文件,注意文本使用Reader Writer,非文本使用fis fos File file1 = new File("D:\\test\\1.

Java之IO初识(字节流和字符流)

IO概述 生活中,你肯定经历过这样的场景.当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了.当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里.那么数据都是在哪些设备上的呢?键盘.内存.硬盘.外接设备等等.我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为 输入input 和 输出output ,即流向内存是输入流,流出内存的输出流.Java中I/O操作主要是指使用 java.io 包下的内容,进行输入.输出操作.输入也叫做读取数据,输

IO流(二)字符流

1.字符流:在字节流的基础上添加了编码机制.很大程度上和字节流操作一样的,字符流只能操作文本类文件,准确的说应该是纯文本类文件.例如.txt,.java,.cpp,.html等 编码:每一个国家都有自己的编码,编码不一致往往导致的结果就是!!乱码!!.中国编码的编码:gbk gbk:英文字母:1个字节,中文:2个字节,系统的默认编码. unicode:统一编码.中文还是英文字母都是占2个字节. utf-8: 国际编码.英文占1个字节,中文占3个字节. 文件是用什么编码来写的,那么就用什么编码来读

JAVA学习第五十课 — IO流(四)转换流

一.键盘录入 System.out:标准输出设备,控制台 System.in:标准输入设备,键盘 输入演示 输入字符串遇到回车,打印,输入over,输入结束 PS:键盘的录入只读取一个字节,先将字节拼一个字符串,所以需要一个容器,再参与over的判断 import java.io.*; public class Main { public static void main(String[] args) throws IOException { InputStream in = System.in

关于VS2012连接MySql数据库时无法选择数据源

您的C#开发工具是用VS2012吗?    No! return;    您的数据库用的是MySql吗?     No! return;    您新建ADO.NET数据实体模型的时候选择数据源的时候没有MySql?    No! return; 问题截图:     如果你到这一步了,恭喜你遇到了和楼主一样的问题,下面我来帮你解决.    PS:话说前几天在用EF做项目的时候,想从数据库映射数据库模型,装了各种驱动死活都连不上,但是项目还要做啊.    于是Baidu,Google答案各异, 有的