`

源码剖析之java.io.InputStream

阅读更多
java io 是java操作数据源非常重要的一块。

java io的分类。
1、从源头来分:输入流和输出流
2、从操纵的内容上来看可分为:字符流(内容是文本)和字节流(内容是整体的)

高层抽象类:

字节输入流 --->java.io.InputStream
字节输出流--->java.io.OutputStream

字符输入流--->java.io.Reader
字符输出流--->java.io.Writer


java.io.InputStream 的方法分析如下:
1、    public abstract int read() throws IOException;
   读取一个字节,此方法返回的int 在0-255直接。

2、把inputStream里数据读到b的byte[]数组里。注意此方法调用了上一个抽象read方法
public int read(byte b[], int off, int len) throws IOException {
	if (b == null) {
	    throw new NullPointerException();
	} else if (off < 0 || len < 0 || len > b.length - off) {
	    throw new IndexOutOfBoundsException();
	} else if (len == 0) {
	    return 0;
	}

	int c = read();
	if (c == -1) {
	    return -1;
	}
	b[off] = (byte)c;

	int i = 1;
	try {
	    for (; i < len ; i++) {
		c = read();//循环读取,效率很低,所有 一般要从写此方法
		if (c == -1) { 
		    break;
		}
		b[off + i] = (byte)c;
	    }	} catch (IOException ee) {
	}
	return i;
    }


3、public void close() throws IOException {}
  关闭输入流。
4、public int available() throws IOException
还剩下多少字节可以读取。

5、跳过n个字节。
      注意跳过字节其实通过读取来实现的,并且是循环读取,最大不超过SKIP_BUFFER_SIZE:2048
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;
    }

6、另外三个方法是对是否可以设置回读而设计的(这是公认非常不好的设计方式,应该抽象为独立接口,而不是提供方法进行判断)
分享到:
评论

相关推荐

    java.io.Reader 和 java.io.InputStream 的区别

    java.io.Reader 和 java.io.InputStream 的区别

    android 串口驱动

    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 ...

    xml2jsonjar包

    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; ...

    java项目超市

    import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; ...

    ScalaJavaIoExtras:一些额外的集成使Scala中使用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 ...

    java7源码-JavaIO:JavaIO

    java.io.InputStream java.io.OutputStream java.io.Reader java.io.Writer 4. FileInputStream和FileOutputStream是什么? 这是在拷贝文件操作的时候,经常用的两个类。在处理小文件的时候,它们的性能还不错,在大...

    计算机网络实验报告 获取MAC socket通信

    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....

    restream:用于缓冲和重新读取 java.io.InputStream 的实用程序类

    转播用于缓冲和重新读取 java.io.InputStream 的实用程序类

    aesjava源码-THIS-.-IS-GREAT-:////IntelliJIDEA从.class文件重新创建的源代码//(由Fernflo

    导入java.io.InputStream; 导入java.io.NotSerializableException; 导入java.io.ObjectStreamException; 导入java.io.Serializable; 导入java.security.AccessController; 导入java.security.AuthProvider; 导入java...

    SocketInputStream.java

    深入剖析tomcat第三章SocketInputStream源码 * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/StringManager.java,v 1.2 2001/07/22 20:25:14 pier Exp $ * $Revision: 1.2...

    java网络编程抓取指定网页信息--UrlHtml(java源码)

    import java.io.DataInputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; public class UrlHtml { @SuppressWarnings("deprecation") public ...

    java网络编程示例

    import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class TCPServer { public static void main(String[] args) { try { ServerSocket socket = new ...

    htmlparser下载网页

    java.io.InputStream l_urlStream; java.net.URL l_url = new java.net.URL( "http://sports.sina.com.cn/iframe/nba/live/"); java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url ....

    Struts Updownload 源码

    import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; ...

    Java设计模式

    ● java.io.InputStreamReader(InputStream) ● java.io.OutputStreamWriter(OutputStream) ● javax.xml.bind.annotation.adapters.XmlAdapter#marshal() ● javax.xml.bind.annotation.adapters.XmlAdapter#...

    Java学习测试题,看你会多少(主要基础类)

    import java.io.InputStream; import java.util.Properties; /** *@authorleno *单子模式,保证在整个应用期间只加载一次配置属性文件 */ publicclass Singleton { privatestatic Singleton instance; ...

    读取sd卡图片

    import java.io.InputStream; import android.graphics.Bitmap; import android.graphics.BitmapFactory; public class ImageUtil { /** * 获取网络address地址对应的图片 * @param address * @return bitmap的...

    传智博客jdbc学习案例

    import java.io.InputStream; import java.util.Properties; /** * * 2008-12-6 * * @author &lt;a href="mailto:liyongibm@gmail.com"&gt;liyong&lt;/a&gt; * */ public class DaoFactory { private static UserDao ...

    txt读取文本

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader;...

    java解析给定url

    import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL...

Global site tag (gtag.js) - Google Analytics