- 浏览: 261479 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
zhagener:
package com.huawei.qyq.impl;imp ...
EasyMock使用说明 -
LetCode:
将String转换成InputStream -
Mr_kimilo:
MyEclipse6.5安装的时候出现问题: JS Test ...
javascript测试工具: JsTestDriver -
jersey109:
我同意楼下的,SQLException和IOException ...
check exception和uncheck exception -
jersey109:
楼主,你不说CODE,我觉得你对RuntimeExceptio ...
check exception和uncheck exception
Java 的I/O流给我的感觉就是:要用到的时候用得很多,不用到的时候一点都不沾。Java 的I/O流作为最基本的输入输出系统,我想没多少人不会用到。然而许多人应该都只是使用其最方便的调用方式,而不会去加多一层缓冲。而其实加多一层缓冲区,只是一个很简单的工作却能使其性能有巨大的提高。
Java的I/O类:
基本输入/输出流:InputStream/OutputStream
文件输入/输出流:FileInputStream/FileOutputStream
对象输入/输出流:ObjectInputStream/ObjectOutputStream
字符数据的输入/输出流:Reader/Writer
在Java的一般输入/输出流中都是采用单字节的读取方法,每次只读取一个字节的数据,效率低。如果在读取与写入时增加一个临时缓冲区,每次便可读取一个缓冲区大小的数据块,提高效率。
mark--1:系统缓冲流提高性能
......//方式一
InputStream in = null;
OutputStream out = null;
try{
in = new FileInputStream( "D:/fileFrom.err" );
out = new FileOutputStream( "D:/fileTo.err" );
while( true ){
int bytedata = in.read();
if( bytedata == 1 )
break;
out.write(bytedata );
}
}finally{......}
......//方式二
InputStream inBuffer = null;
OutputStream outBuffer = null;
try{
InputStream in = new FileInputStream( "D:/fileFrom.err" );
inBuffer = new BufferedInputSteam(in); //系统缓冲
OutputStream out = new FileOutputStream( "D:/fileTo.err" );
inBuffer = new BufferedInputSteam(out); //系统缓冲
while( true ){
int bytedata = in.read();
if( bytedata == 1 )
break;
out.write(bytedata );
}
}finally{......}
文件763KB下:
方式一是直接读取与写入的,耗时:4844ms
方式二是系统缓冲区类读取与写入,耗时:3156ms
mark--2:自定义缓冲区提高I/O操作效率
自定义缓冲区其实就是自己创建一个数组来担当缓冲区的角色。
在利用数组做缓冲区之前先了解下数组读取与写入的方法与单字节的区别:
单字节读取与写入:
FileInputStream.read();
FileOutputStream.write( int b );
数组读取与写入:
InputStream.read(byte[] b);
InputStream.read(byte[] b, int off, int length );
FileOutputStream.write(byte[] b );
FileOutputStream.write(byte[] b, int off, int length );
除此之外系统缓冲区类也有同样的方法:(也就是将参数改成和上面的一样)
BufferInputStream.read(byte[] b, int off, int length );
BufferOutputSteam.write(byte[] b, int off, int length );
现在使用自定义数组来作缓冲区,看看时间效率如何。
......
InputStream in = null;
OutputStream out = null;
try{
in = new FileInputStream( "D:/fileFrom.err" );
out = new FileOutputStream( "D:/fileTo.err" );
int availableLength = in.avialable();
byte[] totalBytes = new byte[availableLength ];
int bytedata = in.read(totalBytes);
out.write(totalBytes);
}finally{......}
同mark--1同样的文件,此时耗时109ms。此时需要注意的就是,由于此时的缓冲区是自定义的,大少也由你来决定。这便要你选择恰当大小的缓冲区,不然如果你的缓冲区过大,而运行的PC的内存又太小的话,可想而知这必将影响系统速度。另外如果文件很小而选取一个很大的缓冲区也将会造成浪费。
mark--3:字符输入/输出流类的缓冲区
......//方式一
Reader reader = new FileReader( "D:/filefrom.err" );
int c = 0;
while( (c = reader.read() ) != -1 ){}
......//方式二,使用缓冲区
reader = new FileReader( "D:/filefrom.err" );
reader = new BufferedReader( reader );
......
运行效率比较: 方式一:361ms 方式二:26ms
mark--4:压缩文件拷贝性能的提高--压缩流
压缩流位置:
java.util.Zip.ZipInputStream
java.util.Zip.ZipOutputStream
......
ZipOutPutStream zipoutputstream = new ZipOutPutStream ( new java.io.FileOutputStream( "D:/fileto.err" ) );
zipoutputstream.setMethod( ZipOutPutStream.DEFLATED );
File file = new File( "D:/filefrom.err" );
byte[] rgb = new byte[1000];
int n;
//创建一个ZIP entry
ZipEntry zipentry = new ZipEntry( "D:/fileto.err" );
//添加ZIP entry 与相关数据
zipoutputsteam.putNextEntry( zipentry );
FileInputStream fileInputstream = new FileInputStream( file );
while( (n = fileInputstream.read(rgb) ) > -1 ){
zipoutputstream.write(rgb, 0, n);
}
......
与直接通过文件输入输出流读写文件相比,压缩流耗时78ms,直接读写耗时172ms。
发表评论
-
类的初始化顺序
2010-03-30 09:28 913我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构 ... -
java static 变量
2010-03-30 09:27 1169有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。 ... -
Java中的构造器(构造方法)的调用
2010-03-30 09:21 1386注意:(1)在子类中的 ... -
java学习中重写与重载方法的区别
2010-03-30 09:17 1437重写的主要优点是能 ... -
收集到的java 正则验证
2010-01-12 13:02 1115import java.util.regex.*; ... -
Apache StringUtils api 中文 英文 对
2010-01-08 11:23 3111StringUtils api 中文 英文 对照 ... -
MyEclipse 7.0 Milestone-1破解
2010-01-05 15:36 1398import java.io.Buffered ... -
JDK中的URLConnection参数详解
2009-12-25 14:50 9712009年07月10日 16:52 针对JDK中 ... -
java 中int String类型转换
2009-12-15 17:08 1665int -> String int i=12345;S ... -
@suppresswarnings
2009-12-03 12:02 1592about @SuppressWarnings. 关键字: ... -
JDK动态代理的简单使用示例
2009-11-17 10:00 1094JDK动态代理的简单使用示例: 如有业务类:package ... -
CGlib简单介绍
2009-11-17 09:59 1097CGlib概述:cglib(Code Generation L ... -
java(Web)中相对路径,绝对路径问题
2009-11-12 17:23 11341.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件 ... -
J2EE项目异常处理
2009-10-23 16:12 987为什么要在J2EE项目 ... -
URLConnection ,获取互联网资源
2009-10-23 15:32 1037这段代码将向你介绍几个比较常见但需要注意的问题: ... -
Java Exception 处理之最佳实践
2009-10-23 15:31 792本文是Exception处理的一篇不错的文章,从Java Ex ... -
java多线程及线程池小结
2009-10-23 15:29 2713最近在学习线程池的东西,前面有篇文章《线程池的设计原则》, ... -
java 异常Exception
2009-10-22 11:26 1163异常处理是程序设计中 ... -
check exception和uncheck exception
2009-10-22 11:15 6201使用Checked Exception还是UnChecked ... -
java之classloader体系结构(含hotswap)
2009-10-15 15:40 1261jvm classLoader architecture : ...
相关推荐
在Java编程语言中,输入/输出(I/O)是处理数据传输的核心部分。过滤流(Filter Stream)是Java I/O框架中的一个重要概念,它提供了一种优雅的方式来进行数据的读写操作,同时允许我们添加额外的功能,如字符编码...
7. **性能优化**:书中还涉及了如何通过缓冲、管道、异步I/O等技术来提高Java I/O的性能。 8. **案例研究**:提供了一些实际应用示例,帮助读者理解如何在实际项目中应用Java I/O技术。 9. **错误处理和调试**:...
本文将深入探讨Java I/O层次结构,包括核心类、接口和它们的关系,以及常见用法。 1. **基础概念** - **流(Stream)**:Java I/O中的流分为字节流(Byte Stream)和字符流(Character Stream)。字节流处理单个字节...
5. **输入/输出(I/O)**:学习如何读写文件,使用流进行数据传输,以及如何进行网络通信,这些都是Java应用开发中的常见任务。 6. **线程与并发**:Java提供了强大的线程支持,课程会讲解线程的基本操作,同步机制...
通过学习这本书,开发者不仅可以掌握Java性能优化的核心技术,还能培养出良好的编程习惯,使程序运行得更快、更稳定,为企业的系统性能提供有力保障。同时,对于个人技能提升和职业发展,这本书也具有很高的价值。
标题“NIO与I/O的区别”涉及到的是Java编程中关于输入/输出(I/O)模型与新I/O(New I/O,NIO)模型的对比。这两种模型在处理数据流时有不同的特性和适用场景,理解它们的区别对于优化Java程序的性能至关重要。 I/O...
Java高级编程涵盖了许多关键主题,其中包括Java输入/输出(I/O)系统,非阻塞I/O(NIO),以及基于Java的Netty框架。这些领域是Java开发人员深入理解和优化应用程序性能的重要部分。 首先,Java I/O是Java平台的...
5. **Java I/O系统**:Java的I/O流体系结构提供了读写文件、处理输入输出流的能力。源代码会涵盖FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等类的使用,以及NIO(New I/O)框架,包括...
Java程序性能优化是Java开发者关注的核心议题之一,它涉及到如何编写高效、运行流畅的代码,以提高应用程序的响应速度和整体效率。在这个领域,我们主要关注内存管理、并发处理、算法选择、I/O操作以及垃圾收集等多...
考虑到给定的信息,我们将不包含重复的“每日书籍更新收藏必备***”这一部分内容,我们将专注于阐述“Java网编程原理与JSP.Web开发核心技术”这一主题的知识点。 首先,“Java网编程原理”涉及的是一系列基于Java...
Java NIO(New IO)在Java 1.4引入,提供了非阻塞I/O,提高了并发性能。书中会对比讲解两者,指导开发者如何选择合适的IO模型。 6. **多线程**:Java提供了强大的多线程支持。书中会讲述线程的创建、同步、通信,...
《Java核心编程第九版》是Java开发者的重要参考资料,它涵盖了Java语言和开发的深度内容。本书分为两卷,Volume I主要关注基础知识,而Volume II则深入到高级特性。以下是这两卷书中涉及的主要知识点: **Volume I-...
- **多路复用I/O(Multiplexing I/O)**:Java NIO的Selector机制,允许多个套接字的事件被单一线程轮询,提高并发性能。 4. **TCP连接管理** - **连接池**:为优化性能,Java应用通常使用连接池来复用TCP连接,...
5. **输入/输出(I/O)**:包括文件操作、流的概念、序列化与反序列化,以及NIO(非阻塞I/O)的理解和应用。 6. **多线程编程**:掌握线程的创建、同步与通信,如synchronized关键字、wait()、notify()和notifyAll()...
第二章“流”是Java网络编程的核心概念。Java中的I/O流提供了处理输入和输出的强大工具,无论是处理文件、网络连接还是其他资源,流都扮演着关键角色。本章详细阐述了字节流和字符流的区别,以及如何使用InputStream...
- Java NIO (New I/O) API提供了非阻塞I/O的支持,主要包括`Selector`、`Channel`和`Buffer`等核心组件。 3. **网络编程安全性**: - 在网络通信过程中,数据的安全性非常重要。 - 可以使用SSL/TLS协议来加密...
Okio 是一个面向 Java 的现代 I/O API,它由 Square 公司开发并维护,作为一个开源项目,...通过深入研究 Okio 的设计和实现,开发者可以学习到更多关于 I/O 缓存、并发处理和性能优化的知识,从而提升自己的编程技能。
《Java网络编程技术与实践》是由杜佳荣等人编著的一本深入讲解Java网络编程的书籍。这本书通过详细的实例和理论结合,旨在帮助读者掌握Java在网络编程中的应用。虽然提供的压缩包只包含了第一至第十章的部分源代码,...
2. **Java类库**: 这些是Java编程语言的核心API,包括基础类如集合框架、I/O流、网络编程、多线程等。Java SE(标准版)类库提供了一个广泛的接口和类,供开发者使用。 3. **编译器**: OpenJDK 包含了javac,这是...
Java高级编程是一个涵盖广泛的主题,包括但不限于多线程、网络编程、I/O流、集合框架、反射、注解、设计模式、JVM优化等多个方面。这份"java高级编程.zip"的压缩包文件很可能是为了帮助Java开发者深入理解这些概念而...