在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;
}
}
分享到:
相关推荐
深入剖析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...
- 分析`InputStream`的源码有助于理解其工作原理,特别是对于自定义输入流或优化读取性能的情况。 综上所述,解决“Java InputStream读取数据问题”涉及理解`InputStream`的工作机制,熟练掌握其基本操作,以及...
总之,InputStream是Java IO库中的核心类,理解其源码有助于深入学习Java IO机制,提升程序设计和问题排查的能力。通过阅读源码,开发者可以更好地理解Java IO流的工作原理,从而在实际编程中更加游刃有余。
在Java编程中,有时我们可能需要将一个已经写入数据的`OutputStream`转换为`InputStream`,以便重新读取这些数据。这种情况通常出现在临时存储或处理数据时,例如在网络传输或者存储到内存中的场景。本篇文章将深入...
标签 "源码" 暗示这篇博客可能深入剖析了 `InputStream` 类的源代码,分析了其实现细节和设计思路。这可能包括类的构造函数、方法的实现逻辑以及与其他类的协作关系。 "工具" 标签可能意味着博客作者讨论了如何利用...
Socket中的InputStream的`read`方法是Java网络编程中一个核心的概念,它在处理客户端与服务器之间的数据传输时起着至关重要的作用。...同时,结合源码分析,我们可以深入理解Java I/O的内部实现,提升编程技能。
例如,`java.io`包下的`File`类用于文件操作,`InputStream`和`OutputStream`接口及其子类处理输入输出流,`java.nio`包引入了非阻塞I/O模型,提高了性能。通过深入理解这些类和接口,开发者能更好地进行文件操作、...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款... InputStream is=ftpClient.list(); //得到服务器目录与文件列表输入流 StringBuffer info=new StringBuffer(); /...
这个项目可能会使用Java的I/O流(InputStream/OutputStream)和文件操作类(FileReader/FileWriter)来处理文件内容。GUI方面,它会使用Java Swing组件,如JTextArea、JButton等来构建编辑区域和菜单栏。此外,还...
5. **文件操作**:源码还需要处理PDF文件的读取和保存,可能使用Android的File、InputStream/OutputStream和ContentProvider等API。 6. **事件处理**:为了响应用户的交互,如点击、滚动和触摸手势,源码中会包含一...
Swing GUI版本的Scrcpy投屏Demo源码是一套基于Java Swing库开发的桌面应用程序,主要用于实现Android设备的屏幕镜像功能。Scrcpy是一款轻量级且高效的Android设备投屏工具,它允许用户在电脑上实时查看并控制手机...
Java提供了多种方式加载和处理资源,如使用InputStream和BufferedImage。 7. **游戏逻辑**:尽管这部分源码主要关注界面,但可能也会涉及一些基础的游戏逻辑,如单位移动、攻击判定等。这部分代码展示了如何将玩家...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
标签中的"源码"提示我们可能需要深入理解`ServletOutputStream` 和`InputStream` 的内部实现,包括它们如何与网络I/O交互,以及如何处理缓冲区和数据编码等问题。而"工具"可能指的是使用这些流类来构建各种服务器端...
6. **I/O流**:Java的I/O流系统非常强大,包括文件读写、网络通信等,实例将展示如何使用InputStream、OutputStream、Reader、Writer等类。 7. **网络编程**:Java提供了Socket编程接口,实例可能包含客户端和...
`InputStream`和`OutputStream`是所有输入/输出流的基类,`FileInputStream`和`FileOutputStream`则用于与文件交互。 至于sun目录下的源码,它包含了Oracle JDK特有的实现,如JNI(Java Native Interface)、JVM...
5. **I/O流**:Java的I/O流系统用于读写文件、网络通信等,源码将展示如何使用InputStream、OutputStream、Reader、Writer以及BufferedReader、BufferedWriter等类进行数据传输。 6. **网络编程**:Java提供了...
通过源码,我们可以看到InputStream、OutputStream、Reader、Writer以及NIO(New IO)的相关实现,这对于我们进行文件操作、网络通信等非常有帮助。 6. 网络编程:Java提供了Socket和ServerSocket类来进行网络通信...
源码中可能会使用File类来创建、读取、写入和删除文件,或者使用InputStream/OutputStream处理二进制数据。此外,Android特有的ContentResolver和Uri接口也可能被用于访问媒体库或特定类型的文件。 3. **目录遍历与...
- **音频文件保存**:源码会包含如何在设备上创建、保存和读取录音文件的逻辑,通常涉及File类和InputStream/OutputStream的使用。 - **文件路径管理**:录音文件通常存储在特定的目录下,如外部存储的“Download...