会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132413个问题


package BufferedInputStream_01;
import java.io.*;
/*
 * BufferedInputStream 缓冲字节流,用于提高读取效率
 * 同时也是处理流(包装流)
 */
public class BufferInputStream_01 {
	public static void main(String[] args) throws IOException{

		File sourceAddress = new File(File.separator+"Users"+File.separator+"luo"+File.separator);
		File sourceFile	   = new File(sourceAddress,"Downloads"+File.separator+"pconline1572649741588.dmg");
		File destniyFile   = new File(sourceAddress,"Desktop"+File.separator+sourceFile.getName());
		File desktopDirectory=new File(sourceAddress,"Desktop"+File.separator);
		byte[]buffer = new byte[10];
		FileInputStream fi = new FileInputStream(sourceFile);
		if(fi.markSupported()) {
			fi.mark(fi.available());
		}else {
			System.out.println("不支持标记");
		}
		FileOutputStream fo= new FileOutputStream(destniyFile);
		long currentTime = System.currentTimeMillis();
		int times=0;
		int length=0;
		while((length=fi.read(buffer))!=-1) {
			times++;
			fo.write(buffer,0,length);
		}
		fo.flush();
		long finishTime = System.currentTimeMillis();
		System.out.println("中转"+times+"次\t使用字节流总共耗时"+(finishTime-currentTime)+"毫秒");
		//fi.reset();
		fi.close();
		fi = new FileInputStream(sourceFile);
		Reader reader = new InputStreamReader(fi);
		FileOutputStream tempForWriter=new FileOutputStream(new File(desktopDirectory,"(1).dmg"));
		Writer writer = new OutputStreamWriter(tempForWriter);
		times=0;
		length=0;
		char[] bufferC = new char[buffer.length];
		
		long readerTime = System.currentTimeMillis();
		while((length=reader.read(bufferC))!=-1) {
			times++;
			writer.write(bufferC,0,length);
			/*也许用字符来复制就是打不开*/
		}
		tempForWriter.flush();
		writer.flush();
		long writerTime = System.currentTimeMillis();
		System.out.println("中转"+times+"次\t使用字符流总共耗时"+(writerTime-readerTime)+"毫秒");
		times=0;
		length=0;
		byte[] buffer3 =  new byte[buffer.length];
		long bufferedTime = System.currentTimeMillis();
		//fi.reset();不支持流标记
		fi.close();
		fi = new FileInputStream(sourceFile);
		BufferedInputStream  bi  = new BufferedInputStream(fi);
		FileOutputStream tempForBuffered = new FileOutputStream(new File(desktopDirectory,"(2).dmg"));
		BufferedOutputStream bo  = new BufferedOutputStream(tempForBuffered);
		while((length=bi.read(buffer3))!=-1) {
			times++;
			bo.write(buffer3,0,length);
			/*不加长度,复制出来的文件一定打不开*/
		}
		bo.flush();
		tempForBuffered.flush();
		long bufferedFinish = System.currentTimeMillis();
		System.out.println("使用buffered总共读取了"+times+"次"
				+"\t耗时"+(bufferedFinish-bufferedTime)+"毫秒");
		writer.close();
		reader.close();
		tempForWriter.close();
		bo.close();
		bi.close();
		tempForBuffered.close();
		fi.close();
		fo.close();
		System.out.println("拷贝完成");
	}
}

老师您好,我的是Mac系统,为什么字节流和缓冲字节流,复制应用程序后能打开,但是字符流就是打不开,我找不到错误的地方

image.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 3211楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 3213楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 3217楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 3219楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 3220楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 3221楼

package com.hy.io.TestInputStreamReader;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

/***
 * 测试转换流
 * @author hy
 *
 */

public class TestInputStreamReader01 {
	public static void main(String[] args) throws IOException  {
		//任务需求是将键盘输入的数据写入磁盘		
		//1,数据源的标准输入,键盘System.in
		InputStream is=System.in;
		//2,使用转换流,转换成字符串
		InputStreamReader isr=new InputStreamReader(is,"gbk");
		//3,提高读取效率
		BufferedReader br=new BufferedReader(isr);
		//4,提高写入效率
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\cc.txt")));							
			//5,写入磁盘文件
			String line=null;//用来存储读到的字符串
			while("over".equals((line=br.readLine()))){//通过读取的字符和over进行对比,如果相等,则停止
				bw.write(line);//读取整行字符
				bw.newLine();//换行
				bw.flush();	//手动刷新缓存	
			}		
			//6,关闭程序			
			bw.close();				
			br.close();					
	}
}

老师你好,我是按照视频敲得代码,但是最后的控制台输入时,怎么换行呀?如果输入的是非over数据,按enter换行时,程序运行也就结束了指定的文件为空;如果输入的是over,按enter键可以正常换行继续输入,但是指定的文件中只会有over这个数据,

JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 3224楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637