如: <!---->xml version="1.0" encoding="GBK"
PushbackInputStream 读取后,会变成: <!---->xml version='1.0' encoding='GBK'
而UTF-8不会!
java 代码
- public static void testStream() throws IOException{
- int MAX=2048;
- URL url=new URL("http://www.open-open.com/indexrss.xml");
- / URL url=new URL("http://www.blogjava.net/kukoo/Rss.aspx");
- InputStream input=url.openStream();
- byte bytes[]=new byte[MAX];
- PushbackInputStream bfInput=new PushbackInputStream(input);
- OutputStream out=new FileOutputStream(new File("e:/temp/rss.xml"));
- BufferedOutputStream bfOut=new BufferedOutputStream(out);
- int read=0;
- int totalBytes=0;
- int offset = 0;
- int max = MAX;
- while((read=bfInput.read(bytes,offset,max))!=-1&&offset
- totalBytes+=read;
- bfOut.write(bytes, offset, max);
- offset+=read;
- max-=read;
- System.out.println("read:"+read+"total:"+totalBytes);
- }
-
- System.out.println(read+":"+totalBytes);
- bfOut.flush();
- bfOut.close();
- bfInput.close();
- Reader reader=new InputStreamReader(new ByteArrayInputStream(bytes,0,offset));
- BufferedReader bufferReader=new BufferedReader(reader);
- String longer=bufferReader.readLine();
- System.out.println(""+longer);
- }
分享到:
相关推荐
Java 字节流与字符流的介绍 Java 中的流操作可以分为两种:字节流和字符流。字节流是指以 byte 为单位进行读写操作的流,而字符流是指以 char 为单位进行读写操作的流。 字节流的介绍 字节流的所有读操作都继承自...
在某些情况下,BOM可能会引起问题,例如在读取文本文件时,可能会导致额外的乱码字符出现在文件的开头。本文将深入探讨如何使用Java来处理带有BOM的UTF-8文件。 首先,`UnicodeInputStream`和`UnicodeReader`是Java...
在本例中,我们读取到逗号后,再次调用`read()`方法,此时会返回被推回的逗号,从而实现将逗号替换为"(回退,"的逻辑。 运行结果展示了这种替换效果:“hello(回退,) rollenholt”。这表明`PushbackInputStream`成功...
InputStreamReader InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。 LineNumberInputStream 已过时。 此类错误假定字节能充分表示字符。 LineNumberReader 跟踪...
- `PushbackInputStream`:允许未读取的字节回推到流中。 - `BufferedInputStream`:提高输入流的性能,通过缓冲区读取数据。 - `LineNumberInputStream`:跟踪输入流中的行号。 2. **字节输出流体系结构**: -...
- **PushbackInputStream**:允许在读取数据后将其推回输入流中再次读取,适用于解析器等场景。 通过这些扩展类,开发者可以根据实际需求灵活地选择合适的Stream进行数据处理,从而提高程序的灵活性和效率。
在实际应用中,经常需要在字节流和字符流之间进行转换,例如从字节流中读取字符数据或者将字符数据写入字节流中。Java IO系统提供了以下几种转换流: - `InputStreamReader`:将字节流转换为字符流。 - `...
- 特殊子类如`LineNumberInputStream`、`DataInputStream`、`BufferedInputStream`、`PushbackInputStream`等,提供额外功能如行号追踪、数据格式读取优化、缓冲区读取和数据回退等。 - **OutputStream**:用于...
- **StringReader**: 将字符串对象转换为输入流,按字符读取。 - **FileReader**: 用于读取文件中的文本数据。 - **PipedReader**: 用于线程间基于字符的通信。 ###### 输出Stream - **CharArrayWriter**: 类似于...
- 字符流在读取和写入时通常比字节流慢,因为涉及到字符编码的转换。然而,字符流的一次操作可以读取更多的信息(16位),因此在某些情况下可以弥补这种转换带来的开销。 4. **类名约定**: - 字节流类名通常以`...
- `PushbackInputStream`: 允许将读取的数据重新推回到输入流中。 - `DataInputStream`: 提供了按基本类型读取数据的方法。 - `GZIPInputStream`: 支持GZIP格式的数据解压。 - `ZipInputStream`: 支持从ZIP文件...
当出现文件找不到或无法读取等情况时,程序会抛出此类异常,我们需要通过`catch`块来妥善处理。 通过这两个实验,我们可以了解到Java IO流的基本使用步骤:创建输入流对象,创建对应类型的输出流对象,然后通过读写...
字符流在处理时会考虑编码问题,使得可以正确处理各种语言的文本数据。 - **InputStream**: - `CharArrayReader`:类似于`ByteArrayInputStream`,但处理的是字符数组。 - `StringReader`:基于字符串创建输入流...
- **PushbackInputStream**:允许将数据推回到流中,常用于编译器开发。 ##### 2.2.2 用于封装以字符为导向的Input 接下来的部分将继续讨论用于封装以字符为导向的输入流的类,如`BufferedReader`等,以及如何使用...
在处理文本数据时,有时需要在字节流和字符流之间进行转换。 - **`InputStreamReader`**:将字节流转换为字符流。 - **`OutputStreamWriter`**:将字符流转换为字节流。 #### 六、高级IO流——过滤器流 过滤器流...
- **PushbackInputStream**:允许将已经读取的某个字节重新推回到流中。 ##### 2. 过滤输出流 - **DataOutputStream**:为基本数据类型如int、char等提供写入功能。 - **BufferedOutputStream**:与`...
- **`PushbackInputStream`**:允许将一个或几个读取的字节放回输入流中。 ##### 2. FilterOutputStream及其子类 - **`DataOutputStream`**:用于向`OutputStream`写入基本数据类型。 - **`BufferedOutputStream`*...