zoukankan      html  css  js  c++  java
  • Java字节流与字符流基本操作

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

    在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数组变为字符串输出
    	}
    
    }
    

    字节流与字符流的区别

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

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

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

    使用字节流更好

  • 相关阅读:
    Mongodb
    Java原子类
    volatile
    uniapp输入空格
    看不见的的html
    小程序隐藏scroll-view滚动条的方法
    云函数调用云函数 openid不存在
    vue路由中 Navigating to current location ("/xxx") is not allowed
    Vue: 单页面应用如何保持登录状态
    letter-spacing
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/5274638.html
Copyright © 2011-2022 走看看