【原创】java.io.InputStream优化

今天无聊看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;
	}

这样即节省了skipBuffer2048个空间,代码也更简单;

继续看了一下子类的代码,都覆盖了这个方法。但优化后的方法总比优化前强!

相关推荐