黑马程序员——基础篇——关于字节流和字符流的区别

   ------- <a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流! ----------


 1、字节流读取的时候,读到一个字节就返回一个字节。字符流使用了字节流读到一个或多个字节(中文对应的字节为两个,UTF-8码表中是三个)时,先去查指定的编码表,将查到的字符返回。
         2、字节流可以处理所有类型数据,如图片、MP3等。字符流只能处理字符数据。
         3、字节流输入流都是以InputStream结尾,字节流输出流都是以OutputStream结尾,在InputStream或者OutputStream前面代表这个流的作用。字符流输入流都是以Writer结尾,字符流输出流都是以Reader结尾,相同与字节流前面也是代表这个流的作用。
        如果处理的是纯文本数据,优先使用字符流,除此之外都考虑使用字节流。


//字符流练习,自定义缓冲类

import java.io.*;
class MyBufferedReaderDemo
{
		//主函数
        public static void main(String[] args) throws IOException 
        {
				//创建缓冲区
                MyBufferedReader mybf = new MyBufferedReader(new FileReader("CopyTest2.java"));
                String line = null;
				
				//循环读取数据,并打印在控制台上
                while((line = mybf.MyReadLine()) != null)
                {
                        System.out.println(line);
                }
                mybf.MyClose();//关闭读取流资源
        }
}
//自定义缓冲类
class MyBufferedReader
{
        private FileReader r;
        MyBufferedReader(FileReader r)
        {
                this.r = r;
        }
        public String MyReadLine() throws IOException
        {
                StringBuilder sb = new StringBuilder();
                
                int ch = 0;
				//读取数据
                while((ch = r.read()) != -1)
                {
						//设置结束标记
                        if(ch == '\r')
                                continue;
                        if(ch == '\n')
                                return sb.toString();
                        else
                                sb.append((char)ch);
                }
                if(sb.length() != 0)
                        sb.toString();
                return null;
        }
        //关闭资源
        public void MyClose() throws IOException
        {
                r.close();
        }
}

//字节流练习,自定义输出流缓冲类

import java.io.*;

//自定义输出流缓冲类
class MyBufferedInputStream
{
        private InputStream in;
        
        private byte[] buf = new byte[1024];
        
        private int pos = 0,count = 0;
        
		//创建带参数构造函数
        MyBufferedInputStream(InputStream in)
        {
                this.in = in;
        }
        
        public int myRead()  throws IOException
        {
                //通过in对象对去硬盘数据
                if(count == 0)
                {
                        count = in.read(buf);
						//设置输出流结束标记
                        if(count < 0)
                                return -1;
                        pos = 0;
                        
                        byte b = buf[pos];
                        
                        count--;
                        pos++;
                        return b&255;
                }
                else if(count > 0)
                {
                        byte b = buf[pos];
                        
                        count--;
                        pos++;
                        return b&255;
                }
                return -1;
                
        }
        public void myClose() throws IOException
        {
                in.close(); //关闭流资源
        }
}

class MyInputStreamDemo
{
		//主函数
        public static void main(String[] args)  throws IOException
        {
                long start = System.currentTimeMillis();
                copy_1();
                long end = System.currentTimeMillis();
        }
		//读取指定文件数据,并将数据保存
        public static void copy_1() throws IOException 
        {
                MyBufferedInputStream bufis = new MyBufferedInputStream(new FileInputStream("YPOK 01.mp3"));
                BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("YPOK 02.mp3"));
                
                int by = 0;
                //循环读取数据并将数据保存
                while((by = bufis.myRead()) != -1)
                {
                        bufos.write(by);
                }
                
                bufos.close();//关闭输出流资源
                bufis.myClose();//关闭读取流资源
        }
}
 

----------android培训java培训、java学习型技术博客、期待与您交流!------------  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值