`
Luob.
  • 浏览: 1602676 次
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多
带行号的缓冲字符流
LineNumberReader
自定义带行号的缓冲字符流


import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.Reader;

/**
 * 基于带行号的 缓冲的类
 */
public class LineNumberRreaderDemo {

	public static void main(String[] args) throws IOException {

		method();
		
		//method_1();
		
	}
	//使用自定义模拟的 行号缓冲类
	public static void method() throws IOException{
		FileReader fr=new FileReader("E:\\workspace4\\exam\\src\\com\\itheima\\day18\\SystemDemo.java");
		
		MyLineNumberReader mnr=new MyLineNumberReader(fr);
		mnr.setLineNumber(101);
		String line=null;
		while((line=mnr.myReadLine())!=null){
			System.out.println(mnr.getLineNumber()+":"+line);
		}
		mnr.close();
	}
	
	//使用java自带的
	public static void method_1() throws IOException{

		FileReader fr=new FileReader("E:\\workspace4\\exam\\src\\com\\itheima\\day18\\SystemDemo.java");
		
		LineNumberReader lnr=new LineNumberReader(fr);
		
		String line=null;
		lnr.setLineNumber(101); //从101开始
		while((line=lnr.readLine())!=null){
			System.out.println(lnr.getLineNumber()+":"+line);
		}
		lnr.close();
		
	}
}



//练习:模拟一个带行号的缓冲区 简化 下面的类
class MyLineNumberReader1 extends MyBufferedReader1{
	private int lineNumber;
	
	MyLineNumberReader1(Reader fr) {
		super(fr);
	}
	public String myReadLine() throws IOException{
		lineNumber++;
		return super.myReaderLine();
	}
	
	public void setLineNumber(int lineNumber){
		this.lineNumber=lineNumber;
	}
	
	public int getLineNumber(){
		return lineNumber;
	}
	
}

//发现下面的 的代码 有重复  
class MyLineNumberReader{
	private Reader r;
	private int lineNumber;
	
	public MyLineNumberReader(Reader r){
		this.r=r;
	}
	
	public void setLineNumber(int lineNumber){
		this.lineNumber=lineNumber;
	}
	
	public int getLineNumber(){
		return lineNumber;
	}
	
	public String myReadLine() throws IOException{
		StringBuilder sb=new StringBuilder();
		lineNumber++;
		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)
			return sb.toString();
		
		return null;
		
	}
	
	public void close() throws IOException{
		r.close();
	}
	
}


字节流

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 字符流
 * Writer
 * Reader
 * 
 * FileWriter
 * FileReader
 * 
 * BufferedWriter
 * BufferedReader
 * 
 * 字节流
 * InputStream
 * OutputStream
 * 
 * BufferedInputStream
 * BufferedOutputStream
 *
 *需求: 想要操作图片数据,这是就需要用到字节流
 */
public class FileStream {

	public static void main(String[] args) throws IOException {
		
		 //	writeFile();
		System.out.println("开始");
		//readFile_1();
		//readFile_2();
		readFile_3();
		System.out.println("结束");
	}
	
	public static void writeFile() throws IOException{
		
		FileOutputStream fos=new FileOutputStream("fos.txt");
		fos.write("abc".getBytes()); //发现没有关闭 ,没有  刷新 文件中也有 文本了
		fos.close();  //不写时候 ,文件中有文本
		
	}

	//一次读取一个 
	public static void readFile_1() throws IOException{
		FileInputStream fis=new FileInputStream("fos.txt");
		int ch=0;
		while((ch=fis.read())!=-1){
			System.out.println((char)ch);
		}
		fis.close();
	}
	
	//一次读取一个数组
	public static void readFile_2() throws IOException{
		FileInputStream fis=new FileInputStream("fos.txt");
		
		byte[] buf=new byte[1024];
		int len=0;
		while((len=fis.read(buf))!=-1){
			System.out.println(new String(buf,0,len));
		}
		fis.close();
		
	}
	
	//返回文档的长度
	public static void readFile_3() throws IOException{
		FileInputStream fis=new FileInputStream("fos.txt");
		byte[] buf=new byte[fis.available()];  //定义好一个刚刚好大小的缓冲区
		
		int num=fis.available();  //数据不大的时候  可以这样使用 ,拷贝大的电影的时候.
		System.out.println("文件中字符数量="+num);
		fis.read(buf);
		
		System.out.println(new String(buf));
		
		fis.close();
	}
	
}

字节流 练习:复制一个图片

import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 字节流 练习:复制一个图片
 * 
 * 思路:
 *    1)用字节流读取流对象和图片关联
 *    2)使用字节流对象创建一个图片文件,用于存储获取到的图片数据.
 *    3)通过循环读写,完成数据的存储.
 *    4)关闭资源.
 */
public class CopyPic {
	public static void main(String[] args) {
		copyPic();
	}
	
	public static void copyPic(){
		FileInputStream fis=null;
		FileOutputStream fos=null;
		try {
			fis=new FileInputStream("c:\\1.jpg");
			fos=new FileOutputStream("c:\\2.jpg");
			byte[] buf=new byte[1024];
			int len=0;
			while((len=fis.read(buf))!=-1){
				fos.write(buf,0,len);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(fis!=null)
				try {
					fis.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			if(fos!=null)
				try {
					fos.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
		}
		
		
		
	}

}

* 演示mp3的复制,通过缓冲区完成

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 演示mp3的复制,通过缓冲区 
 *	BufferedInputStream
 *	BufferedOutputStream
 *	
 */
public class CopyMp3 {
	public static void main(String[] args)throws IOException {
		
		long start=System.currentTimeMillis();
		//copy_1();
		copy_2();//速度快 1000ms
		long end=System.currentTimeMillis();
		System.err.println(end-start);
	}
	
	
	//一个一个的读取 然后 一个一个的写 
	public static void copy_1() throws IOException{
		BufferedInputStream bufis=new BufferedInputStream(new FileInputStream("D:\\Kugou\\元若蓝 - 绿袖子.mp3"));
		BufferedOutputStream bufos=new BufferedOutputStream(new FileOutputStream("C:\\元若蓝 - 绿袖子.mp3"));
		
		int by=0;
		while((by=bufis.read())!=-1){
			bufos.write(by);
		}
		bufis.close();
		bufos.close();
	}

	//每次读取一个数组 ,然后写一个 
	public static void copy_2()throws IOException{
		BufferedInputStream bufis=new BufferedInputStream(new FileInputStream("D:\\Kugou\\元若蓝 - 绿袖子.mp3"));
		BufferedOutputStream bufos=new BufferedOutputStream(new FileOutputStream("C:\\元若蓝 - 绿袖子.mp3"));
		
		byte[] buf=new byte[1024];
		int len=0;
		while((len=bufis.read(buf))!=-1){
			bufos.write(buf,0,len);
		}
		bufis.close();
		bufos.close();
		
	}
	
}


自定义字节流缓冲区

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class MyBufferedInputStreamDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		
		MyBufferedInputStream mbufis=new MyBufferedInputStream(new FileInputStream("D:\\Kugou\\元若蓝 - 绿袖子.mp3"));
		BufferedOutputStream bufos=new BufferedOutputStream(new FileOutputStream("C:\\元若蓝 - 绿袖子.mp3"));
		
		int by=0;
		while((by=mbufis.myRead())!=-1){
			bufos.write(by);
		}
		mbufis.myClose();
		bufos.close();
	}

}

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对象读取硬盘上的数据,并存储咋buf中
		if(count==0){
			count=in.read(buf);
			if(count<=0)
				return -1;
			pos=0;
		}
		byte b=buf[pos];
		pos++;
		count--;
		return b&0xff;
	}
	
	
	public void myClose() throws IOException{
		in.close();
	}
}
0
3
分享到:
评论

相关推荐

    Java IO 字节流 字符流

    Java IO系统分为两大类:字节流和字符流。字节流主要用于处理任何类型的原始数据,如图片、音频文件或者二进制文件,而字符流则专注于处理基于文本的数据。本文将深入探讨这两类流的原理、用途以及它们之间的关联。 ...

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。

    Java IO字符流和字节流

    ### Java IO字符流和字节流详解 #### 一、引言 在Java编程中,输入输出(简称IO)操作是十分重要的一个方面。通过IO操作,我们可以读取文件、网络数据、用户输入等,也可以将数据写入到文件、网络、控制台等。Java...

    利用缓冲区提高Java应用程序的IO性能

    ### 利用缓冲区提高Java应用程序的IO性能 #### 摘要与背景介绍 Java作为一门具有跨平台特性的编程语言,在多个领域都获得了广泛的应用。随着Java应用的不断扩展,其性能问题逐渐成为人们关注的重点,尤其是输入...

    JavaIO实例_字节流_字符流_缓冲流_转换流IODemo

    在Java中,IO流分为两大类:字节流和字符流,每种流又有输入流和输出流之分,分别用于数据的读取和写入。 1. **字节流**: - 字节流处理的是8位的字节数据,是最基本的流类型。Java中的`InputStream`和`...

    Java的IO流讲解代码: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型

    File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)、字符流(缓冲字符流、文件字符流、转换流、格式化输出流、字符数组流) 这份代码源码...

    JavaIO实例|字节流|字符流|缓冲流|转换流IODemo

    在Java中,IO流被设计用来在不同的数据源和目的地之间传输数据,如文件、网络连接、内存缓冲区等。本教程将详细介绍Java IO中的字节流、字符流、缓冲流以及转换流,并通过IODemo实例来展示它们的用法。 ### 1. 字节...

    Java字符流和字节流

    ### Java字符流和字节流详解 #### 一、引言 在Java中,I/O流主要用于处理输入输出操作,包括文件读写等。根据处理数据类型的不同,Java I/O流主要分为字节流和字符流两大类。字节流处理的是8位的字节数据,而字符流...

    IO流 javaio java 流

    Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又可以进一步细分为输入流(InputStream/Reader)和输出流(OutputStream/Writer)...

    Java-Io流,练习

    1. 字节流:Java的`java.io`包中提供了处理字节流的类,如`InputStream`和`OutputStream`作为所有字节输入流和输出流的基类。它们的子类如`FileInputStream`和`FileOutputStream`分别用于文件的读写。 2. 字符流:...

    javaIO字节流读取文件方式总结共4页.pdf.zip

    Java IO字节流是Java平台中用于处理二进制数据的核心API,主要用于文件的读写操作。本资料“javaIO字节流读取文件方式总结共4页.pdf”详细介绍了Java字节流在读取文件时的各种方法和应用场景。本文将深入探讨这些...

    io流详解,字符流和字节流代码

    本文件包“io流详解,字符流和字节流代码”显然是针对Java IO流的深入学习资源,包含了代码示例和可能的可视化解释。 IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流处理的是8位的数据...

    java IO流精讲 JAVA IO流实例开发

    Java IO流的精讲涵盖了许多概念和技术,包括流的分类、流的方向、缓冲区的使用、字符编码以及一些实用的IO类和方法。在实例开发中,我们将深入理解这些概念并应用到实际项目中。 首先,Java IO流按照数据传输的方向...

    java io流 案例

    Java IO库提供了丰富的类和接口来支持不同类型的流,包括字节流、字符流、对象流、缓冲流、转换流以及过滤流等。 字节流(Byte Stream)是处理原始二进制数据的流,分为输入流和输出流。InputStream和OutputStream...

    java中IO流例子

    - 还有一些缓冲字节流,如`BufferedInputStream`和`BufferedOutputStream`,它们通过内部缓冲区提高读写效率,减少磁盘或网络的交互次数。 2. **字符流**: - 字符流处理Unicode字符数据,主要由`Reader`和`...

    java之io流实例

    IO流在Java中分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理的是Unicode编码的字符,而字节流则处理基本的8位字节数据。这两类流又各自分为输入流(Input Stream)和输出流(Output ...

    Java IO流 总结

    在Java IO流中,节点流是指离数据源或程序最近的流处理流,主要有两种类型:字节流和字符流。字节流可以处理一切类型的数据,如纯文本、音频、视频等,而字符流只能处理纯文本数据。 2. 字节流: 字节流是Java IO...

    IO各种操作文件,字符流、字节流等

    在Java IO中,主要有两种流的概念:字符流(Character Stream)和字节流(Byte Stream)。它们是处理数据的基本方式,适用于不同场景。 字符流主要处理基于字符的数据,如文本文件,它包括Reader和Writer两个抽象...

    Java基础篇:IO流.pdf

    字节流(InputStream和OutputStream)用于处理二进制数据,字符流(Reader和Writer)则用于处理字符数据。Java的IO操作,无论是读取文件、网络通信还是序列化对象,都是通过流的方式来实现。 流的分类包括了多种...

    一文读懂Java IO流 1. IO流基础概念 1.1 什么是IO流 1.2 IO流的分类 1.2.1 按数据传输单位分类 1.2.2 按功能角色分类 1.3 Java IO流体系结构 1.4 流的基

    一文读懂Java IO流 ...4.2 缓冲字节流 4.2.1 BufferedInputStream 4.2.2 BufferedOutputStream 4.3 缓冲字符流 4.3.1 使用缓冲字符流的高级操作 4.3.2 缓冲流性能对比 4.4 缓冲流的最佳实践 4.5 实用缓

Global site tag (gtag.js) - Google Analytics