今天无聊看java源码时发现 java.io.InputStream类用于移动文件指针的skip()方法可以再优化一下:
源码:
public long skip(long n) throws IOException {
long remaining = n;
int nr;
if (skipBuffer == null)
skipBuffer = new byte[SKIP_BUFFER_SIZE];
byte[] localSkipBuffer = skipBuffer;
if (n <= 0) {
return 0;
}
while (remaining > 0) {
nr = read(localSkipBuffer, 0,
(int) Math.min(SKIP_BUFFER_SIZE, remaining));
if (nr < 0) {
break;
}
remaining -= nr;
}
return n - remaining;
}
可以优化为:
public long skip(long n) throws IOException {
if (n <= 0) {
return 0;
}
int i=0;
while ( read() != -1 && i < n) {
i++;
}
return i;
}
这样即节省了skipBuffer 2048个空间,代码也更简单;
继续看了一下子类的代码,都覆盖了这个方法。但优化后的方法总比优化前强!
分享到:
相关推荐
### Java.io.Reader与Java.io.InputStream的关键差异解析 在深入探讨`java.io.Reader`与`java.io.InputStream`的具体差异之前,我们首先需要理解这两者在Java I/O操作中的基础角色。`java.io.Reader`和`java.io....
在探讨Java.nio与Java.io之间的比较时,我们首先需要理解这两个包在Java编程语言中的核心作用和它们各自的优势。Java.io和Java.nio是Java中处理输入/输出操作的两个主要框架,它们各自拥有独特的特性和应用场景。 #...
在Java中,IO操作主要分为字节流和字符流两大类,分别由`java.io.InputStream`和`java.io.OutputStream`以及`java.io.Reader`和`java.io.Writer`作为基类。字节流处理的是8位的字节,而字符流处理的是16位的Unicode...
import java.io.InputStream; import java.io.OutputStream; import android.util.Log; public class SerialPort { private static final String TAG = "SerialPort"; /* * Do not remove or rename the ...
在Java IO中,Decorator模式主要体现在各种InputStream、OutputStream、Reader和Writer类的使用上。例如,当我们需要对一个InputStream进行缓冲操作时,可以使用BufferedInputStream,它包装了一个原始的InputStream...
在Java编程环境中,进行串口通信时,常常会遇到一个问题:缺少`gnu.io`包,导致无法正常编译或运行程序。这个问题主要出现在使用RXTX库进行串口操作的项目中。RXTX是一个开源的Java库,它提供了与硬件进行串行通信的...
import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; ...
import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; ...
Java.io包是Java编程语言中的核心包之一,它包含了用于输入/输出操作的类和接口。这个包在Java中扮演着至关重要的角色,因为它提供了处理数据流、字符流、对象序列化、文件读写以及与操作系统交互的各种工具。在本...
在Java编程语言中,`java.io`包是用于输入/输出(I/O)操作的基础部分,包含了许多类和接口,使得开发者能够处理数据流、字符流、对象序列化、磁盘文件以及网络连接等任务。本篇文章将深入探讨`java.io`包中的关键概念...
java.io.InputStream集成 用法: import com . github . joshlemer . java_io_extras . _ import java . io . InputStream // get an InputStream from somewhere val inputStream : InputStream = ??? // convert ...
- Java.IO流库提供了处理输入和输出数据的类,允许程序读取和写入数据到各种源和目的地,如文件、网络连接、内存缓冲区等。 - **输入流**(InputStream)用于读取数据,而**输出流**(OutputStream)用于写入数据...
Apache Commons IO库中的`org.apache.commons.io.FileUtils`类是一个非常实用的工具类,它提供了大量方便、高效的方法,用于处理文件系统操作。这个类在Java开发中被广泛使用,尤其是在处理大量的文件读写和管理任务...
java.io.InputStream 则是复姓 java.io,名字为 InputStream 的类别。Java 使用 package 这种机制的原因很简单,就是为了避免类别名称的冲突,全世界的 Java 类别数量非常多,如果类别不使用套件名称,那在用到相同...
19. **java.io.InputStream**和**java.io.OutputStream**:所有字节流的基类,提供了基本的读写操作。 20. **java.io.Reader**和**java.io.Writer**:所有字符流的基类,用于处理字符数据。 21. **java.io....
java.io.InputStream is = new java.io.DataInputStream( sk.getInputStream()); // 接受网络输入流 写入文件 int len = 0; byte[] buff = new byte[1024]; while((len=is.read(buff))!=-1){ fos....
相较于Java标准库中的`java.io.File`类提供的`copy()`方法,`commons-io`的`FileUtils.copyFile()`更简单易用,且异常处理更简洁。 总的来说,`commons-io-2.5.jar` 是Java开发者的强大工具,它极大地扩展了Java IO...
### Java JDK IO包类详解 #### 概述 Java平台提供的`io`包为开发者提供了访问文件系统、对象序列化等功能...总之,`java.io`包是Java编程语言的重要组成部分,对于任何想要深入理解Java平台的开发者来说都至关重要。
7. `java.io.InputStream`:InputStream是所有字节输入流的基类,用于读取字节数据。 8. `java.util.Set`:Set接口表示不允许重复元素的集合。 9. `java.util.Arrays`:Arrays类提供了静态方法来操作数组,如排序...