- 浏览: 1590429 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
BufferedWriter
BufferedReader
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; /** * IO中 字符流的缓冲技术 * 1)缓冲区的出现提高了对数据的读写效率. * 2)对应类. * BufferedWriter * BufferedReader * 3)缓冲区要结合流才可以使用. * 4)在流的基础上对流的功能进行了增强. * * * 缓冲区的出现是为了提高流的操作效率而出现的. * 所以在创建缓存区之前,必须要先有流对象. * * 该缓冲区中 提供了一个跨平台的换行符.newLine(); */ public class BufferedWriterDemo { public static void main(String[] args) throws IOException { //创建一个字符写入流对象 FileWriter fw=new FileWriter("buf.txt"); //为了提高字符写入流的效率,加入缓存技术. //只要将需要提高效率的流对象作为参数传递给缓冲区的构造函数即可 BufferedWriter bufw=new BufferedWriter(fw); bufw.write("ab\r\ncde"); bufw.newLine();// 换行 window:\r\n linux:\n for(int x=0;x<5;x++){ bufw.write("abc"+x); bufw.newLine(); //自动换行方法 bufw.flush(); //必须要刷新, 如果不小心停电了 ,这样不会丢失数据 } //记住只要用到缓冲区 ,就要记得刷行. bufw.flush(); //其实关闭缓冲区,就是关闭缓冲区中的流对象 bufw.close(); //这句不用写了 //fw.close(); } }
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; /** * 读取缓冲区 * 该缓冲区提供了一个一次读取一行的方法 readLine,(但不包含行终止符号.即不会换行,这是有效文本)方便对文本数据的获取. * readLine():只返回回车符好之前的数据内容,并不返回回车符号 * 当返回null 表示读取到了文件的末尾 */ public class BufferedReaderDemo { public static void main(String[] args) throws IOException { //创建一个读取流对象和文件相关联. FileReader fr=new FileReader("buf.txt"); //为了提高效率,加入缓冲技术 //将字符读取流对象作为参数传递给缓冲对象的构造函数 BufferedReader bufr=new BufferedReader(fr); /*String s1=bufr.readLine(); //提供的读取一行 System.out.println("s1:"+s1); */ String line=null; while((line=bufr.readLine())!=null){ System.out.println(line); } bufr.close(); } }
自定义BufferedReader模拟里面的功能
import java.io.FileReader; import java.io.IOException; /** * 明白了BufferedReader类中的特有方法,readLine的原理后 * 可以自定义一个类中包含一个功能和readLine一致的方法. */ public class MyBufferedReaderDemo { public static void main(String[] args) throws IOException { FileReader fr=new FileReader("E:\\workspace4\\exam\\src\\com\\itheima\\day18\\SystemDemo.java"); MyBufferedReader mbufr=new MyBufferedReader(fr); String line=null; while((line=mbufr.myReaderLine())!=null){ System.out.println(line); } mbufr.myClose(); } } //装饰设计模式 模拟 BufferedReader 对 read() class MyBufferedReader{ private FileReader fr; MyBufferedReader(FileReader fr){ this.fr=fr; } //可以一次读一行的方法. public String myReaderLine() throws IOException{ //定义一个临时的容器,原BufferedReader封装的是一个字符数组 //为了演示方便,定义一个StringBuilder容器,因为最终还是要将数据变成字符串. StringBuilder sb=new StringBuilder(); int ch=0; while((ch=fr.read())!=-1){ if(ch=='\r') continue; if(ch=='\n') return sb.toString(); else sb.append((char)ch); } if(sb.length()!=0) //如果最后一行没有 \n 会丢失最后一行 return sb.toString(); return null; } public void myClose() throws IOException{ fr.close(); } }
MyBufferedReader1的升级完善
import java.io.FileReader; import java.io.IOException; import java.io.Reader; /** * 明白了BufferedReader类中的特有方法,readLine的原理后 * 可以自定义一个类中包含一个功能和readLine一致的方法. */ public class MyBufferedReaderDemo1 { public static void main(String[] args) throws IOException { FileReader fr=new FileReader("E:\\workspace4\\exam\\src\\com\\itheima\\day18\\SystemDemo.java"); MyBufferedReader1 mbufr=new MyBufferedReader1(fr); String line=null; while((line=mbufr.myReaderLine())!=null){ System.out.println(line); } mbufr.close(); } } //装饰设计模式 模拟 的完善 class MyBufferedReader1 extends Reader{ //现在只能对FileReader进行装饰 //private FileReader fr; //这样我们就可以对 Reader 这样 一组类进行 装饰了 private Reader fr; //MyBufferedReader1(FileReader fr){ MyBufferedReader1(Reader fr){ this.fr=fr; } //可以一次读一行的方法. public String myReaderLine() throws IOException{ //定义一个临时的容器,原BufferedReader封装的是一个字符数组 //为了演示方便,定义一个StringBuilder容器,因为最终还是要将数据变成字符串. StringBuilder sb=new StringBuilder(); int ch=0; while((ch=fr.read())!=-1){ if(ch=='\r') continue; if(ch=='\n') return sb.toString(); else sb.append((char)ch); } if(sb.length()!=0) //如果最后一行没有 \n 会丢失最后一行 return sb.toString(); return null; } //复写 Reader中的close public void close() throws IOException{ fr.close(); } //复写 Reader中的read public int read(char[] cbuf, int off, int len) throws IOException { // TODO Auto-generated method stub return fr.read(cbuf, off, len); } }
装饰上设计模式
/** * 装饰设计模式: * 当想对已有的对象进行功能增强时候 * 可以定义类,将已有对象传入,基于已有的功能,并提供加强功能. * 那么自定义的该类称为"装饰类" * * 装饰类通常会通过构造方法接受被装饰的对象. * 并基于被装饰的对象功能提供更强的功能. * * * 装饰类和 继承 的区别 * MyReader //专门用户读取数据的类 * |--myTextReader * |--myMediaReader * * 一年后,发现 以上的读取速度有点慢,想到了缓冲技术 * MyReader //专门用户读取数据的类 * |--myTextReader * |--MyBufferTextReader * |--myMediaReader * |--MyMediaReader * * 一年后 出现了新的数据类型 * MyReader //专门用户读取数据的类 * |--myTextReader * |--MyBufferTextReader * |--myMediaReader * |--MyBufferMediaReader * |--MyDataReader * |--myBufferDataReader * * 既然上面使用的缓冲技术都是同一种技术,这样发现上面的结构 都比较 臃肿 * * class MyBufferReader{ * myBufferTextReader(myTextReader r){ * * } * myBufferMediaReader(myMediaReader r){ * * } * myBufferDataReader(myDataReader r){ * * } * } * * 又发现以上的类的扩展性极差 * 找到其参数的共同类型,通过多态的形式,可以提高扩展性 * * class MyBufferReader extends MyReader{ * * MyReader r; //组合结构 * MyBufferReader(MyReader r){ * this.r=r; * } * * public void myBufferReader(){ * //缓存操作 * } * } * * //最后的结构是 * MyReader //专门用户读取数据的类 * |--myTextReader * |--myMediaReader * |--myDataReader * |--myBufferReader * * 总结: * 装饰类比继承跟灵活,避免了继承体系的臃肿 * 而且降低了类和类之间的关系. * 装饰类因为增强已有兑对象,具备的功能和已有的是相同的,只不过是提供更强大的功能 * 所以装饰类 和被装饰类通常都属于一个体系. * 由以前的继承结构 -->变成了 -->组合结构 * */ public class DecorationDemo { public static void main(String[] args) { Person p=new Person(); p.chifan(); //以前吃饭是这样的 System.out.println("========生活富裕了=========="); SuperPerson sp=new SuperPerson(p); sp.superChifan(); } } class Person{ public void chifan(){ System.out.println("吃饭"); } } class SuperPerson{ Person p; SuperPerson(Person p){ this.p=p; } //后来人升级了, 吃饭的方法也不同了. public void superChifan(){ System.out.println("喝汤"); System.out.println("开胃酒"); p.chifan(); System.out.println("甜点"); System.out.println("来一根"); } }
通过缓冲区复制一个.java文件
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * 通过缓冲区复制一个.java文件 */ public class CopyTextByBuf { public static void main(String[] args) { BufferedReader bufr=null; BufferedWriter bufw=null; try { bufr=new BufferedReader(new FileReader("E:\\workspace4\\exam\\src\\com\\itheima\\day18\\SystemDemo.java")); bufw=new BufferedWriter(new FileWriter("bufWriter_copy.txt")); String line=null; //这就变成了中转站 替换了 char[] while((line=bufr.readLine())!=null){ bufw.write(line); bufw.newLine(); bufw.flush(); } } catch (Exception e) { e.printStackTrace(); //读写失败 }finally{ if(bufr!=null) try{ bufr.close(); }catch(IOException e){ throw new RuntimeException("读取关闭失败"); } if(bufw!=null) try{ bufw.close(); }catch (IOException e) { throw new RuntimeException("写入关闭失败"); } } } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 999public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2282经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5654package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 990import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1055/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1010//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1826更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1417import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 816import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2398import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 925// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1174import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 802import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1145import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3893import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 965/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1023import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1842Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1005/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2232package out; import ja ...
相关推荐
### 利用缓冲区提高Java应用程序的IO性能 #### 摘要与背景介绍 Java作为一门具有跨平台特性的编程语言,在多个领域都获得了广泛的应用。随着Java应用的不断扩展,其性能问题逐渐成为人们关注的重点,尤其是输入...
2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。
Java IO字符流缓冲区实现原理解析是Java编程语言中的一种重要机制,该机制旨在提高IO操作的效率和性能。缓冲区是Java IO字符流中的一种机制,它可以将数据暂存起来,以便提高读写效率。在本文中,我们将深入探讨Java...
线缓冲区的生成就是其中之一。 以下是一个简单的Java代码示例,展示了如何使用JTS库生成线缓冲区: ```java import org.locationtech.jts.geom.*; import org.locationtech.jts.io.ParseException; import org....
java IO教程,java IO教程,java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程,java IO教程,java IO教程,java IO...
此外,Java还提供了一些缓冲流,如BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter,它们提高了读写性能,通过内部缓冲区批量处理数据。这些缓冲流可以在字节流和字符流上进行包装,...
在Java中,IO流分为两大类:字节流和字符流,每种流又有输入流和输出流之分,分别用于数据的读取和写入。 1. **字节流**: - 字节流处理的是8位的字节数据,是最基本的流类型。Java中的`InputStream`和`...
总结来说,Java的IO流是一个庞大且重要的主题,涵盖了数据的输入、输出、缓冲、转换等多个方面。对于初学者而言,理解和掌握IO流的基本概念、分类以及常用类的用法是至关重要的。通过实践练习,可以加深对IO流的理解...
fgetc函数可能通过系统调用进入内核读1K字节到IO缓冲区中,然后返回IO缓冲区中的第一个字节给用户,把读写位置指向IO缓冲区中的第二个字符,以后用户再调fgetc,就直接从IO缓冲区中读取,而不需要进内核了,当用户把...
Java 字符流缓冲区是 Java 中用于提高 IO 操作效率的一种机制,它通过在内存中缓存一部分数据,然后批量写入或读取,以提高流的读写效率。在 Java 中,BufferedReader 和 BufferedWriter 是两个常用的缓冲类,它们...
Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的基础框架,它提供了丰富的类库,使得程序能够与各种设备、文件、网络进行数据交互。然而,传统的IO模型在处理大量并发连接时表现出效率较低的问题,...
- 缓冲字符流(BufferedReader/BufferedWriter):提高读写性能,通过内部缓冲区进行操作。 - 转换流(InputStreamReader/OutputStreamWriter):用于在字节流和字符流之间转换。 3. 处理流: - Filter流:这些...
Java IO流的精讲涵盖了许多概念和技术,包括流的分类、流的方向、缓冲区的使用、字符编码以及一些实用的IO类和方法。在实例开发中,我们将深入理解这些概念并应用到实际项目中。 首先,Java IO流按照数据传输的方向...
这篇详细的总结将围绕Java IO体系结构、核心类、流的概念、缓冲区、转换流、字符集、文件操作、对象序列化以及NIO(非阻塞IO)等多个方面进行展开。 一、Java IO体系结构 Java IO体系是Java平台中用于处理数据输入...
### Java IO流基础知识点 #### 一、IO流概述 - **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、...
Java IO流中的字符缓冲流(Character Buffer Stream)是提高数据读写效率的重要工具,它针对字符流进行优化,尤其在处理大量文本数据时效果显著。本文将深入解析字符缓冲流的使用及其作用。 字符流主要分为两个核心...
Java NIO提供了与传统I/O不同的I/O工作方式,它引入了缓冲区(Buffer)和通道(Channel)的概念,支持非阻塞式IO。相对于传统的IO,NIO支持面向缓冲区的、基于通道的I/O操作。NIO还引入了选择器(Selector)的概念,允许...
Java IO应届生培训讲义是一份面向刚毕业的大学生进行Java IO相关知识的培训资料,它涵盖了Java IO的基础知识、不同的IO模型以及Java中的BIO、NIO和AIO高级IO类库。下面详细解释这些知识点: 1. 用户空间和内核空间 ...
Java IO系统的设计基于流(Stream)的概念,流可以视为数据传输的通道,允许我们对文件、网络连接、内存缓冲区等进行读写操作。 在Java IO框架中,主要分为字符流和字节流两大类。字节流处理单个字节的数据,包括...
### Java IO字符流和字节流详解 #### 一、引言 在Java编程中,输入输出(简称IO)操作是十分重要的一个方面。通过IO操作,我们可以读取文件、网络数据、用户输入等,也可以将数据写入到文件、网络、控制台等。Java...