`
默默的小熊
  • 浏览: 232779 次
社区版块
存档分类
最新评论

InputStream源码

 
阅读更多

    在Java程序中,通常会使用IO的输入输出,这里的输入输出是相对你的程序而言的。比如你写一个程序要读取一个文本文件,这里有两个对象,你的程序,还有就是文本文件。你的程序需要数据,那么用的应该是输入流(InputStream).

 

public class ReadText {

	public static void main(String[] args){
		try {
			FileInputStream input = new FileInputStream("test.txt");
			/*对于我接下来的程序,我要读取数据,但我完全不需要考虑数据从何
			 * 而来,我只要知道有个input对象,它给我了读取数据的方法、途径*/
			
			int data;
			while((data = input.read())!= -1){
				System.out.print((char)data);
			}
			
			input.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

    你可以把自己想象成站在海边,然后波涛汹涌的海水(数据)正像你涌来。下面是InputStream的源码:

 

public abstract class InputStream implements Closeable {

	private static final int SKIP_BUFFER_SIZE = 2048;

	private static byte[] skipBuffer;

	/*
	 * 从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经
	 * 到达流末尾而没有可用的字节,则返回值-1。在输入数据可用、检测到流末尾或者抛出异
	 * 常前,此方法一直阻塞。 子类必须提供此方法的一个实现。
	 */
	public abstract int read() throws IOException;

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

	public int read(byte b[]) throws IOException {
		return read(b, 0, b.length);
	}

	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 int available() throws IOException {
		return 0;
	}

	public void close() throws IOException {
	}

	public synchronized void mark(int readlimit) {
	}

	public synchronized void reset() throws IOException {
		throw new IOException("mark/reset not supported");
	}

	public boolean markSupported() {
		return false;
	}

}
分享到:
评论

相关推荐

    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 InputStream读取数据问题

    - 分析`InputStream`的源码有助于理解其工作原理,特别是对于自定义输入流或优化读取性能的情况。 综上所述,解决“Java InputStream读取数据问题”涉及理解`InputStream`的工作机制,熟练掌握其基本操作,以及...

    通过JDK源码学习InputStream详解

    总之,InputStream是Java IO库中的核心类,理解其源码有助于深入学习Java IO机制,提升程序设计和问题排查的能力。通过阅读源码,开发者可以更好地理解Java IO流的工作原理,从而在实际编程中更加游刃有余。

    将输出流OutputStream转化为输入流InputStream的方法

    在Java编程中,有时我们可能需要将一个已经写入数据的`OutputStream`转换为`InputStream`,以便重新读取这些数据。这种情况通常出现在临时存储或处理数据时,例如在网络传输或者存储到内存中的场景。本篇文章将深入...

    INPUTSTREAM

    标签 "源码" 暗示这篇博客可能深入剖析了 `InputStream` 类的源代码,分析了其实现细节和设计思路。这可能包括类的构造函数、方法的实现逻辑以及与其他类的协作关系。 "工具" 标签可能意味着博客作者讨论了如何利用...

    Socket中InputStream的read方法的阻塞特性

    Socket中的InputStream的`read`方法是Java网络编程中一个核心的概念,它在处理客户端与服务器之间的数据传输时起着至关重要的作用。...同时,结合源码分析,我们可以深入理解Java I/O的内部实现,提升编程技能。

    java源码文档src

    例如,`java.io`包下的`File`类用于文件操作,`InputStream`和`OutputStream`接口及其子类处理输入输出流,`java.nio`包引入了非阻塞I/O模型,提高了性能。通过深入理解这些类和接口,开发者能更好地进行文件操作、...

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款... InputStream is=ftpClient.list(); //得到服务器目录与文件列表输入流  StringBuffer info=new StringBuffer(); /...

    java 源码 java 源码

    这个项目可能会使用Java的I/O流(InputStream/OutputStream)和文件操作类(FileReader/FileWriter)来处理文件内容。GUI方面,它会使用Java Swing组件,如JTextArea、JButton等来构建编辑区域和菜单栏。此外,还...

    android pdf阅读源码

    5. **文件操作**:源码还需要处理PDF文件的读取和保存,可能使用Android的File、InputStream/OutputStream和ContentProvider等API。 6. **事件处理**:为了响应用户的交互,如点击、滚动和触摸手势,源码中会包含一...

    Swing GUI版本Scrcpy投屏Demo源码

    Swing GUI版本的Scrcpy投屏Demo源码是一套基于Java Swing库开发的桌面应用程序,主要用于实现Android设备的屏幕镜像功能。Scrcpy是一款轻量级且高效的Android设备投屏工具,它允许用户在电脑上实时查看并控制手机...

    星际争霸部分源码

    Java提供了多种方式加载和处理资源,如使用InputStream和BufferedImage。 7. **游戏逻辑**:尽管这部分源码主要关注界面,但可能也会涉及一些基础的游戏逻辑,如单位移动、攻击判定等。这部分代码展示了如何将玩家...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    handleStream ServletOutputStream out = response.getOutputStream(); InputStream i

    标签中的"源码"提示我们可能需要深入理解`ServletOutputStream` 和`InputStream` 的内部实现,包括它们如何与网络I/O交互,以及如何处理缓冲区和数据编码等问题。而"工具"可能指的是使用这些流类来构建各种服务器端...

    140个java源码实例源码整理

    6. **I/O流**:Java的I/O流系统非常强大,包括文件读写、网络通信等,实例将展示如何使用InputStream、OutputStream、Reader、Writer等类。 7. **网络编程**:Java提供了Socket编程接口,实例可能包含客户端和...

    rt.jar的源码

    `InputStream`和`OutputStream`是所有输入/输出流的基类,`FileInputStream`和`FileOutputStream`则用于与文件交互。 至于sun目录下的源码,它包含了Oracle JDK特有的实现,如JNI(Java Native Interface)、JVM...

    《core java》全部源码

    5. **I/O流**:Java的I/O流系统用于读写文件、网络通信等,源码将展示如何使用InputStream、OutputStream、Reader、Writer以及BufferedReader、BufferedWriter等类进行数据传输。 6. **网络编程**:Java提供了...

    corejava7源码

    通过源码,我们可以看到InputStream、OutputStream、Reader、Writer以及NIO(New IO)的相关实现,这对于我们进行文件操作、网络通信等非常有帮助。 6. 网络编程:Java提供了Socket和ServerSocket类来进行网络通信...

    android的XPLORE的源码

    源码中可能会使用File类来创建、读取、写入和删除文件,或者使用InputStream/OutputStream处理二进制数据。此外,Android特有的ContentResolver和Uri接口也可能被用于访问媒体库或特定类型的文件。 3. **目录遍历与...

    Android项目应用源码-MIUI录音机源码.zip

    - **音频文件保存**:源码会包含如何在设备上创建、保存和读取录音文件的逻辑,通常涉及File类和InputStream/OutputStream的使用。 - **文件路径管理**:录音文件通常存储在特定的目录下,如外部存储的“Download...

Global site tag (gtag.js) - Google Analytics