在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流。

在java.io包中流的操作主要有字节流、字符流两大类,两类都有输入和输出操作。

在字节流中输出数据主要使用OutStream类完成,输入使用的是InputStream类。

在字符流中输出主要使用Write类完成,输入主要是使用Reader类完成。

字节流

字节流主要操作byte类型数据,以byte数组为准,主要操作类是OutputStream类和InputStream类。

<1>字节输出流:OutputStream类

OutputStream是整个IO包中字节输出流的最大父类

向文件中写入字符串

文件不存在则会自动创建

直接将一个字符串变为byte数组,然后将byte数组直接写入到文件中

//=================================================
// File Name : OutputStream_demo
//------------------------------------------------------------------------------
// Author : Common import java.io.File;
import java.io.OutputStream;
import java.io.FileOutputStream; //主类
//Function : 向文件中写入字符串
public class OutputStream_demo { public static void main(String[] args) throws Exception { //异常抛出,不处理
// TODO 自动生成的方法存根
//第一步,找到一个文件
File f = new File("/home/common/software/coding/HelloWord/HelloWord/test.txt");//路径
//第二步,通过子类实例化父类对象
OutputStream out = null; //准备好一个输出的对象
out = new FileOutputStream(f); //通过对象多态性,进行实例化
//第三步,进行写操作
String str = "HelloWord"; //准备一个字符串
byte b[] = str.getBytes(); //只能输出byte数组,所以将字符串变成byte数组 out.write(b); //将内容输出,保存文件
//第四步,关闭输出流
out.close(); //关闭输出流
} }

追加新内容

可以通过FileOutputStream向文件中追加内容。

//=================================================
// File Name : OutputStream_demo
//------------------------------------------------------------------------------
// Author : Common import java.io.File;
import java.io.OutputStream;
import java.io.FileOutputStream; //主类
//Function : 向文件中写入字符串
public class OutputStream_demo { public static void main(String[] args) throws Exception { //异常抛出,不处理
// TODO 自动生成的方法存根
//第一步,找到一个文件
File f = new File("/home/common/software/coding/HelloWord/HelloWord/test.txt");//路径
//第二步,通过子类实例化父类对象
OutputStream out = null; //准备好一个输出的对象
// out = new FileOutputStream(f); //通过对象多态性,进行实例化
out = new FileOutputStream(f,true); //此处表示在文件末尾追加内容
//第三步,进行写操作
String str = "HelloWord"; //准备一个字符串
byte b[] = str.getBytes(); //只能输出byte数组,所以将字符串变成byte数组 // out.write(b); //将内容输出,保存文件 for(int i=0;i<b.length;i++){
out.write(b[i]);
}
//第四步,关闭输出流
out.close(); //关闭输出流
} }

<2>字节输入流:InputStream类

和OutputStream一样,InputStream也是抽象类,必须依靠子类

//=================================================
// File Name : InputStream_demo
//------------------------------------------------------------------------------
// Author : Common import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException; //主类
//Function : 从文件中读取内容
public class InputStream_demo { public static void main(String[] args) throws Exception { //异常抛出,不处理
// TODO 自动生成的方法存根
//第一步,找到一个文件
File f = new File("/home/common/software/coding/HelloWord/HelloWord/test.txt");//路径
//第二步,通过子类实例化父类对象
InputStream input = null; //准备好一个输出的对象
input = new FileInputStream(f); //通过对象多态性,进行实例化
//第三步,进行读操作
// byte b[] = new byte[1024]; //所有的内容读到此数组中
byte b[] = new byte[(int)f.length()]; //所有的内容读到此数组中,数组大小由文件决定
// input.read(b); //把内容取出,内容读到byte数组中
int len = input.read(b);
//第四步,关闭输入流
input.close(); System.out.println("读入数据的长度:"+len); //没有多余的空格产生
System.out.println("内容为:"+new String(b,0,len));//把byte数组变为字符串输出
// System.out.println("内容为:"+new String(b));//把byte数组变为字符串输出
} }

字符流

在程序中一个字符等于两个字节,Java提供了Reader和Writer两个专门操作字符流的类。

<1>字符输出流Writer

也是一个抽象类

和OutputStream相比,可以直接输出字符串,而不用将字符串变为byte数组之后再输出。

//=================================================
// File Name : Write_demo
//------------------------------------------------------------------------------
// Author : Common import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.Writer; //主类
//Function : 向文件中写入内容
public class Write_demo { public static void main(String[] args) throws Exception{
// TODO 自动生成的方法存根
//第一步,找到一个文件
File f = new File("/home/common/software/coding/HelloWord/HelloWord/test.txt");//路径
//第二步,通过子类实例化父类对象
Writer out = null; //准备好一个输出的对象
// out = new FileWriter(f); //通过对象多态性,进行实例化
out = new FileWriter(f,true); //通过对象多态性,进行实例化
//第三步,进行写操作
String str = "HelloWord!!!"; //准备一个字符串
out.write(str); //把内容取出,内容读到byte数组中
//第四步,关闭输入流
out.close();
} }

<2>字符输入流Reader

Reader是使用字符的方式从文件中取出数据

//=================================================
// File Name : Reader_demo
//------------------------------------------------------------------------------
// Author : Common import java.io.File;
import java.io.FileReader;
import java.io.Reader; //主类
//Function : 从文件中读取内容
public class Reader_demo { public static void main(String[] args) throws Exception {
// TODO 自动生成的方法存根
//第一步,找到一个文件
File f = new File("/home/common/software/coding/HelloWord/HelloWord/test.txt");//路径
//第二步,通过子类实例化父类对象
Reader reader = null; //准备好一个输出的对象
reader = new FileReader(f); //通过对象多态性,进行实例化
//第三步,进行读操作
char c[] = new char[1024]; //所有的内容读到此数组中
int len = reader.read(c); //将内容输出
//第四步,关闭输入流
reader.close(); //关闭输入流
System.out.println("内容为:"+new String(c,0,len)); //把char数组变为字符串输出
} }

字节流与字符流的区别

字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的

字符流在操作时使用了缓冲区,通过缓冲区再操作文件

如果一个程序频繁地操作一个资源(如文件或者数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快,这样可以提升程序的性能。

使用字节流更好

Java字节流与字符流基本操作的更多相关文章

  1. java 字节流和字符流的区别 转载

    转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...

  2. java 字节流和字符流的区别

    转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...

  3. Java进阶(四十五)java 字节流与字符流的区别

    java 字节流与字符流的区别(转载)   字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?   实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作 ...

  4. java字节流和字符流,以及java文件操作

    A.首先说字节流:1.字节流在操作的时候不会用到缓冲区(也就是内存)2.字节流可用于任何类型的对象,包括二进制对象3.字节流处理单元为1个字节,操作字节和字节数组.InputStream是所有字节输入 ...

  5. java 字节流与字符流的区别

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...

  6. (转)java字节流和字符流的区别

    转载: http://www.cnblogs.com/dolphin0520/category/361055.html 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同 ...

  7. java 字节流与字符流的区别 (转)

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...

  8. 【转】Java 字节流与字符流的区别

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...

  9. JAVA 字节流和字符流度读写的区别

    java处理文件的类里面,stream结尾都是采用字节流,reader和writer结尾都是采用字符流.两者的区别就是读写的时候一个是按字节读写,一个是按字符. 字符流的底层就是字节流.而字符流主要是 ...

随机推荐

  1. 1025基础REDIS

    -- 登录AUTHPING -- 通用命令EXISTS KEY EXPIRE KEY seconds 为给定 KEY 设置过期时间 -- 字符SET runoobkey redisDEL runoob ...

  2. FTP服务器

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输. 下载"文件就是从 ...

  3. PHP中错误处理集合

    PHP错误处理 错误的分类 通常分3种: 语法错误: 程序运行之前,都要先检查语法.如果语法有错误,就会立即报错,并且不会去执行程序. 运行时错误: 就是在程序语法检查通过后,,开始运行程序并在此过程 ...

  4. 路由知识之ip route 命令中的疑惑

    1.基础知识 1.1 路由 (Routing) 1.1.1 路由策略 (使用 ip rule 命令操作路由策略数据库) 基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目 ...

  5. [转]js中confirm实现执行操作前弹出确认框的方法

    原文地址:http://www.jb51.net/article/56986.htm 本文实例讲述了js中confirm实现执行操作前弹出确认框的方法.分享给大家供大家参考.具体实现方法如下: 现在在 ...

  6. iOS开发,音效的播放简单实现以及音效播放的简单封装

    一.音效的播放简单实现 二.音效播放的封装 -- 封装思路:将生成的SystemSoundID存放到字典中,每次播放的时候从字典中取出对应的SystemSoundID,没有的话再创建 头文件中定义类方 ...

  7. iOS开发中的错误整理,百思项目'我的'模块,tableFooterViewHeight的问题.提醒自己对KVO和Block的运用欠缺

    一.错误分析:由于tableFooterView中的数据是通过请求服务器后得到的,tableFooterViewHeight也是根据请求过来的数据经过布局子控件而计算出来的.(注意:计算高度是在子线程 ...

  8. mysql优化基础

    唯一索引(unique index)强调唯一,就是索引值必须唯一. create unique index [索引名] on 表名 (列名);alter table 表名 add unique ind ...

  9. dede使用方法----更换模板

    刚开始接触dede的时候,自己一直在纠结怎么更换自己的模板啊.后面在秀站网上找到了一个比较好的更换模板的文字教程.下面就我自己做的进行写的笔记. 准备:一个你自己做好的静态版网站,我们假设它的名称是w ...

  10. 【USACO 2.1】The Castle

    /* TASK: castle LANG: C++ SOLVE: 深搜,注意每个方向对应值.枚举去掉的墙,然后再dfs,注意墙要复原,并且dfs里要判断是否超出边界. */ #include<c ...