-
Java IO 字节流计数问题10
long count = 0; String line = br.readLine(); while (line != null) { if (count > length) { break; } count += line.getBytes("UTF-8").length; count += 1; // Add \r's length System.out.println(Thread.currentThread() + " " + line); System.out.println(" count:" + count); line = br.readLine(); }
用这样的方法来统计已读的字节数为什么输出的结果不对呢?具体的说count统计的数目比实际的要少,这是什么原因造成的?2012年8月21日 14:55
7个答案 按时间排序 按投票排序
-
采纳的答案
File file = new File("D:\\todo.txt"); BufferedReader br = new BufferedReader(new FileReader(file)); long length = 1261192704; long count = 0; String line = br.readLine(); while (line != null) { if (count > length) { break; } count += 2; count += line.getBytes("utf-8").length; System.out.println(line); line = br.readLine(); } System.out.println(count); FileInputStream fis = new FileInputStream(file); System.out.println(fis.available());
测试结果:
1、如果windows上边读windows文件 返回结果是正确的;
2、如果windows上边读linux文件结果是有偏差的(count += 1)。
引用getBytes
public byte[] getBytes(Charset charset)使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。
此方法总是使用此字符集的默认替代 byte 数组替代错误输入和不可映射字符序列。如果需要对编码过程进行更多控制,则应该使用 CharsetEncoder 类。
难道有些linux字符在windows上无法映射? 你试下 在linux上读取linux文件 结果对吗2012年8月21日 16:45
-
第二行的 String line = br.readLine(); 经读了一些字符了,但是此时count = 0。。。所以你的程序应该少了第二行程序读到的字符数。
2012年8月22日 00:47
-
问题找到了,
Reader 在读取字符时,在linux上你是把换行符当作一个字节看待,但是如果我忘文件里写了\r\n 你也是看作一个的(就是说linux上也可能写\r\n 可是你只记录了1个字节),所以出问题了。FileInputStream fis = new FileInputStream(file); System.out.println(fis.available()); long r = 0; long n = 0; long c = 0; int i = fis.read(); while(i != -1) { if(i == '\r') { r++; } if(i == '\n') { n++; } c++; i = fis.read(); } System.out.println(c); System.out.println(r); System.out.println(n);
2012年8月21日 18:12
-
if (count > length) {
break;
}
这个判断感觉也好别扭。不知道是什么 可能也会影响结果 都非空判断了 不用break了吧 count>length是判断什么的?2012年8月21日 15:46
-
count += 1; // Add \r's length 这个不用要了吧,已经作了line != null的判断了 应该会排除掉空的回车。每次读一行就用count += 1;好像是错误的。
2012年8月21日 15:43
相关推荐
Java中的字节流分为输入流和输出流,它们都继承自两个基础抽象类:`java.io.InputStream`和`java.io.OutputStream`。InputStream类提供了读取字节数据的方法,OutputStream类提供了写入字节数据的方法。在...
在Java中,流分为字节流和字符流两大类,它们都是抽象的概念,用于表示数据流动的方向。字节流处理的数据单位是字节,而字符流处理的是Unicode编码的字符。 一、字节流 字节流分为输入流和输出流,Java中最基础的...
InputStream 负责从字节流中读取数据,而 OutputStream 负责将数据写入字节流中。InputStream 和 OutputStream 的子类包括: * ByteArrayInputStream 和 ByteArrayOutputStream:使用字节数组作为流的源 * ...
在Java中,IO操作主要分为字节流和字符流两大类,分别由`java.io.InputStream`和`java.io.OutputStream`以及`java.io.Reader`和`java.io.Writer`作为基类。字节流处理的是8位的字节,而字符流处理的是16位的Unicode...
Java IO系统主要由两大类构成:字节流(Byte Stream)和字符流(Character Stream)。这两种流的主要区别在于数据传输单位的不同:字节流是以8位字节为单位进行读写,而字符流则是以16位字符为单位进行读写。Java IO...
- 字节流(Byte Stream):处理二进制数据。 - 字符流(Character Stream):处理文本数据。 #### 3. 常见IO流类 - `InputStream`与`OutputStream`:基础输入输出流。 - `FileInputStream`与`FileOutputStream`:...
### Java IO流的各种组合使用与总结 在Java中,输入/输出(IO)流是进行数据读取和写入操作的基础。本文将详细介绍Java中IO流的多种组合使用方法,并结合示例代码来阐述每种配置的具体应用。 #### 1. 带缓冲的文件...
3. 流的分类:Java的IO流按数据类型分为字节流和字符流,按方向分为输入流和输出流。此外,还有缓冲流、过滤流等,用于提高效率和提供额外功能。 三、代码实现搜索功能 1. 文件搜索:如上述代码所示,可以创建一个...
- `CountingInputStream` 和 `CountingOutputStream` 为输入流和输出流增加了计数功能,同时保持线程安全。 8. **文件观察**: - `FileAlterationObserver` 和 `FileAlterationListener` 用于监听文件系统的改变...
IO过滤器:一系列的装饰器类,可以轻松地在现有流上添加缓冲、计数、关闭监听、线路结束符转换等功能。 目录遍历和文件查找工具。 字节顺序标记(BOM)处理。 大文件支持:部分方法设计用于处理大型文件,避免一次性...
接下来是Java IO/NIO的内容,Java IO是指传统的输入输出流模型,基于阻塞IO模型,而NIO(New IO)则是引入了缓冲区、通道(Channel)和选择器(Selector)等概念,支持非阻塞IO模型,它允许单线程处理多个网络连接。...
Java八股文是一系列针对Java程序员的经典面试题和知识点总结,常常被用来考察候选人的基础知识、编程技巧以及问题解决能力。这些题目涵盖了Java语言的核心特性、集合框架、多线程、异常处理、IO流、网络编程、设计...
5. **I/O流**:`java.io`包提供了输入/输出流的接口和类,如`InputStream`、`OutputStream`、`Reader`、`Writer`等,支持处理字节流和字符流。此外,还有缓冲流、转换流、对象流等高级流,方便进行文件读写、网络...
5. **输入输出流**:I/O流是Java处理数据输入和输出的关键,包括文件操作、字符流、字节流、缓冲流等。了解不同类型的流及其组合使用方式。 6. **多线程**:Java提供并发编程的支持,包括线程的创建、同步、互斥、...
4. Java IO/NIO:Java IO和NIO(New IO)是Java编程中用于处理输入/输出流的不同方式。文档中提到了阻塞和非阻塞IO模型、多路复用IO模型以及异步IO模型。在NIO中,还介绍了缓冲区(Buffer)、通道(Channel)和选择...
在Java编程语言中,统计指定文件中的字符个数是一项常见的任务,这主要涉及到文件I/O操作和字符流处理。下面将详细讲解如何实现这个功能,以及相关的重要知识点。 首先,要进行文件I/O操作,Java提供了`java.io`包...
文件中的代码可能涵盖了字节流(如FileInputStream和FileOutputStream)、字符流(如BufferedReader和PrintWriter)、以及更高级的抽象,如InputStreamReader和OutputStreamWriter。此外,NIO(New IO)提供了一种非...
IO流用于读写数据,分为字节流和字符流两大类,每类又分为输入流和输出流,以及节点流和处理流。 八、反射 10. 反射在Java中的作用是什么? 反射允许程序在运行时动态地获取类的信息(如类名、方法名等)并调用这些...
理解流的概念、流的分类(如字节流和字符流)以及如何使用缓冲区进行高效传输,将对你的编程实践大有帮助。 Java的并发编程是另一个深入的话题。Java提供了线程和锁机制,使得程序可以在多核处理器上并行执行,从而...