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系统,为什么字节流和缓冲字节流,复制应用程序后能打开,但是字符流就是打不开,我找不到错误的地方
问题:
老师能讲解下字符流和字节流俩者之间使用的区别别吗,在应用当中。视频内使用方法基本类似,但不清楚实际运用的选择。
老师:
视频中地文档第三条,减少冲突,装填因子是0.5;这句话怎么理解呢??
如果数组中元素相同,就不再添加,那会不会出现元素个数缺是的情况,如果不会的话,那是怎么标记重复的元素的呢?
按照视频中老师的讲述来看的话。linkedList 的第一个节点元素的前驱指针域是first,不应该是指向他本身的数据域的么?怎么会是空的呢?
HashMap 与 Hashtable 的区别
JDK引入版本
这节的源码怎么保存啊?
Vector用法和ArrayList区别总结如下:
在执行客户端的时候,出现了下面的异常
老师这个异常该怎么解决?
请问:如果要使用 ListIterator 迭代器进行反向遍历,是否必须要先进行一次正向迭代后才行?
请问老师,在方法定义中,我们可以看到有时会有 E, T 这样的类型参数,请问这代表什么?
有以下几个问题想请教一下:
① String类型的常量,在常量池中是字节形式的的吧,比如“abc”,其实就是['a','b','c'] 的数组?
② 那如果是这样的话一个字符占用的空间是一个字节;那么如果出现中文呢,比如"你abc好hello",这样的,在底层是怎么存储的呢?
我在用javac命令时,报错这个,时因为我的文档的编码格式不对么?编码格式不对,运行不是应该出现乱码么,怎么直接编译都不通过呢?
代码:
public class Test { public static void main(String[] args) { String str1 = "abc" + "dbc"; String str4 = "abcdbc"; String str2 = str1 + "cde"; String str3 = new String("hello"); System.out.println(str1 == str4); /** 等号右侧有变量参与运算或者有new关键字时,将会在对内存中开辟空间 */ } }
结果:
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这个数据,
请问老师,以下两种把String 转换为int的方法有什么区别,应用场景有什么区分?
Integer i3 = Integer.valueOf("123");
Integer i4 = Integer.parseInt("123");
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637