`
Luob.
  • 浏览: 1590449 次
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多
带行号的缓冲字符流
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流

    ### Java IO流基础知识点 #### 一、IO流概述 - **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、...

Global site tag (gtag.js) - Google Analytics