先看下面一段代码:
运行结果为:Hello,java
在此代码中如果我不使用temp进行接收每次读取的内容,而直接操作每次读取的内容会怎么样呢?看下面的代码:
运行结果为:el,aa
造成这一结果的原因是什么?
观察可以发现,运行结果是跳跃的,每一个内容与上一个内容都间隔了一个字符。再阅读代码发现:in.read()被调用的两次,所以原因也就出来了:原因是有两次调用in.read(),in.read()是读取下一字节,导致b[]中存储的是跳跃的,即每次存入其中的都与上一个内容相差一个字节。问题并不复杂,重要的是自己书写时可能会造成这样的错误,所以一定要使用temp对读取的内容进行接收,同时只操作temp。发现问题和解决问题时,细心耐心很重要。
分享到:
相关推荐
InputStream是所有输入流的抽象超类,它提供了基本的读取方法,如read()、read(byte[] b)等。InputStream有多种实现类,如FileInputStream、PipedInputStream、FilterInputStream等,每种实现类都有其特定的读取方式...
缓冲流的一个重要特性是可以使用`mark()`和`reset()`方法来标记和重置读取位置。此外,对于输出缓冲流来说,数据会先在内存中缓存,当调用`flush()`方法时,才会将缓存的数据立即写入。 #### 三、类层次结构 Java...
1. **读取XML文件**: 使用`SAXReader`对象的`read`方法从输入流中读取XML文件。 2. **解析根节点**: 通过`getRootElement`方法获取XML文件的根元素。 3. **获取节点信息**: 使用`element`方法获取特定名称的子节点,...
由于`InputStream`类的方法可能抛出`IOException`,所以在实际使用中,通常需要使用try-catch语句进行异常处理,以确保程序的健壮性。 **4. 示例应用** `InputStream`类通常用于从文件、网络、内存或其他数据源...
首先跳过文件头部的两个字节(通常用于标记文件格式),然后逐个读取字符直到遇到结束符(在这里是'$')。这种方式适用于已知文件格式的情况下读取文件。 ### 总结 本文介绍了三种常见的字符编码——Unicode、UTF-...
如果需要重复读取流中同一段内容,则需要使用流类中的 mark 方法进行标记,然后才能重复读取。 本文档对 Java 中的输入输出流和文件读写进行了详细的介绍,涵盖了 I/O 类的体系结构、字节流和字符流、InputStream ...
- `InputStream`中包含`read()`方法用于读取数据; - `OutputStream`中包含`write()`方法用于写入数据。 接下来我们将详细介绍这些基本操作以及`File`类的一些常见用法。 #### 二、InputStream详解 `InputStream`...
需要注意的是,并非所有的子类都支持这个方法。 - **`public void close() throws IOException`**: 关闭当前流,并释放与此流相关的系统资源。这是非常重要的方法,确保资源在使用完毕后被正确释放。 - **`...
2. **流式处理**:使用流(stream)的方式读取文件,而不是一次性加载整个文件到内存中,从而避免因内存不足而导致的问题。 3. **分块上传**:将大文件分成多个小块进行上传,每上传完一块就释放内存,直到文件全部...
+ FileInputStream(FileDescriptor fdObj):通过使用文件描述符fdObj创建一个FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。 + FileInputStream(String name):通过打开一个到实际文件的...
`InputStream`是所有字节输入流的基类,它定义了一些基本的读取操作,如`read()`方法。`read()`方法会从输入流中读取一个字节的数据,并将位置向后移动一位。当到达流的末尾时,`read()`方法会返回-1。为了支持重新...
`InputStream`提供了基本的读取方法,如`read()`,用于从流中读取单个字节。`available()`方法返回尚未读取的字节数,但其结果可能不准确。`close()`方法用于关闭流并释放资源。`mark()`和`reset()`方法支持标记读取...
在提供的`ReadHtml.java`文件中,很可能包含了类似上述步骤的实现。通过对HTML页面的网络请求、解析和数据抽取,我们可以实现从HTML中提取特定信息的需求。在实际应用中,可能还需要处理网络异常、编码问题以及更...
InputStream是所有输入字节流的基类,提供了一些基本的读取方法: 1. `read()`:读取一个字节数据,返回-1表示到达流末尾。 2. `read(byte[] b)`:读取字节数组,返回实际读取的字节数。 3. `read(byte[] b, int off...
InputStream提供了read()方法读取单个字节,read(byte[])读取多个字节,read(byte[], int, int)读取指定长度的字节,skip(long)跳过指定字节,mark()和reset()用于标记和回溯,以及close()关闭流。OutputStream则...
- 示例代码通常会创建FileInputStream对象,使用`read()`方法读取文件内容,注意异常处理和资源释放。 4. **注意事项**: - 处理输入输出时,异常处理是必须的,因为I/O操作可能抛出IOException。 - `while`循环...
需要注意的是,使用完流后,应当调用`close()`方法释放资源。在处理异常时,可以捕获`EOFException`表示文件末尾到达。 总的来说,Java的输入输出流系统提供了一套完整的框架,用于处理各种数据源和目标的输入输出...
- 文件属性测试:exists()检查文件是否存在,canWrite()和canRead()测试写入和读取权限,isFile()和isDirectory()判断文件或目录类型。 - 文件重命名:renameTo()方法用于将文件重命名为新的路径。 Java输入输出...
`markSupported()`、`mark()`和`reset()`方法用于实现数据的回溯读取,如果流支持标记功能,可以通过设置标记并在需要时恢复到标记位置。 与之相对应,`OutputStream`类提供了写入数据的相关方法。`write()`方法也...