.NET IO 复习中的误区

    #region 读取大文件的文本 使用streamReader
                using (StreamReader sr = new StreamReader(ofd.FileName, Encoding.Default))
                {
                    string txt = null;
                    while ((txt = sr.ReadLine()) != null)
                    {
                        this.textBox2.Text += txt+"\r\n";
                    }
                }
                #endregion

一开始想解决每行读取的文本"\r\n"丢失的现象,所以我用了另一种方法

 #region 麻烦的一种方法
                //using (StreamReader sr = new StreamReader(ofd.FileName, Encoding.Default))
                //{
                //    char[] buffer = new char[1024];
                //    int count = sr.Read(buffer, 0, buffer.Length);
                //    string txt = new string(buffer);
                //    this.textBox2.Text += txt;
                //    while (count == buffer.Length)
                //    {
                //        //继续读
                //        count = sr.Read(buffer, 0, buffer.Length);
                //        txt = new string((buffer.Take(count)).ToArray<char>());

                //        this.textBox2.Text += txt;
                //    }
                //}
                #endregion

第二中方法用的是缓冲区读取,这样不会丢失换行符,但是每次读到最后都是会重复的读取(最后的文本无法填满缓冲区竟然会重复读取),造成显示文章的结尾时重复的,这让我非常恼火,于是就用了一种麻烦的方法,在缓冲区中截取每次读取的长度(我发现长度不会有多算,而buffer如果读不满,就会重复读)。

现在想想,也许第一种方式才是最简单,不要想的太复杂。只要在每次ReadLine的结果后加上"\r\n",就行了,方法的ReadLine读取是以读到换行符停止的。

时间: 2024-10-06 00:16:52

.NET IO 复习中的误区的相关文章

JAVA 基础之 IO复习

一.文件: 在IO包中唯一与文件相关的类就是 File类. File类中常用的常量和方法 1.创建文件: 指定路径和将要创建的文件名字以及类型: 然后调用 createNewFile()方法 File file = new File("D:"+File.separator+"MyJavaProgram"+File.separator+"hello.java"); file.createNewFile(); 2.删除文件: 指定路径和文件,包括类型

Python有了asyncio和aiohttp在爬虫这类型IO任务中多线程/多进程还有存在的必要吗?

最近正在学习Python中的异步编程,看了一些博客后做了一些小测验:对比asyncio+aiohttp的爬虫和asyncio+aiohttp+concurrent.futures(线程池/进程池)在效率中的差异,注释:在爬虫中我几乎没有使用任何计算性任务,为了探测异步的性能,全部都只是做了网络IO请求,就是说aiohttp把网页get完就程序就done了. 结果发现前者的效率比后者还要高.我询问了另外一位博主,(提供代码的博主没回我信息),他说使用concurrent.futures的话因为我全

黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类

---------- android培训.java培训.期待与您交流! ---------- 一.File类 (一)概述 1.File类:文件和目录路径名的抽象表现形式 2.作用: (1)用来将文件或文件夹封装成对象 (2)方便于对“文件”与“文件夹属性信息”进行操作 (3)File对象,可以作为参数传递给流的构造函数 (二)构造方法 * 通过File的构造函数创建File对象 方式1:File f = new File("c:\\a.txt"); 方式2:File f2 = newF

1.java.io包中定义了多个流类型来实现输入和输出功能,

1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(C),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(G)   A.输入流和输出流 B.字节流和字符流 C.节点流和处理流   D.File stream E.Pipe stream F.Random stream G.Filter stream

IO包中的其他类

查看各对象API文档 打印流 PrintWriter PrintStream 序列流:对多个流进行排列合并 SequenceInputStream 1 public static void main(String[] args) throws IOException { 2 3 4 /* 5 * 需求:将1.txt 2.txt 3.txt文件中的数据合并到一个文件中. 6 */ 7 8 // Vector<FileInputStream> v = new Vector<FileInput

Java io包中特殊的抽象类FilterReader和FilterWriter实践

刚才在看帮助文档的时候,发现Java io包中FilterReader和FilterWriter类没使用过,所以想实践一下. 还用以前的老方法,new一个出来,结果提示有错误: Cannot instantiate the type FilterReader 不能实例化? 一查帮助文档原来这样写道: public abstract class FilterReader extends Reader Abstract class for reading filtered character str

高性能IO设计中的Reactor模式与Proactor模式

在高性能的IO设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作.在比较这两个模式之前,我们首先要搞明白几个概念.什么是阻塞和非阻塞?什么是同步和异步?同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知(异步的特点就是通知).而阻塞和非阻塞是针

黑马程序员——IO包中的其他类

IO包中的其他类: 1.打印流:提供了打印方法,可以将各种数据类型的数据原样打印     字节打印流PrintStream       构造函数可以接受的参数类型:         (1)File对象  File          (2)字符串路径 String          (3)字节输出流  OutputStream 字符打印流PrintWriter        构造函数可以接受的参数类型:           (1)File对象  File          (2)字符串路径 Str

揭开Java IO流中的flush()的神秘面纱

大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存.这可以通过BufferedOutputStream或BufferedWriter 链接到底层流上来实现. 因此,在写完数据时,flush就显得尤为重要. 例如: 上图中WEB服务器通过输出流向客户端响应了一个300字节的信息,但是,这时的输出流有一个1024字节的缓冲区.所以,输出流就一直等着WEB