关于c#中streamreader使用的困惑

关于c#中streamreader使用的困惑

关于c#中streamreader使用的困惑


File或是FileInfo中的相应open方法其实是对应的stream对象的简写,如果反编译相关函数,大致如下所示,你可以发现,他总结了相应的参数,可能能满足绝大部分使用场景,在这种情况下,使用file.open***可以快捷方便的打开文件流,但是如果在一些特殊场景下,你还是需要使用new streamreader的某些重载来打开文件流。
而具体使用哪种方式看怎么方便了。
public static FileStream OpenRead(string path)
{
return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
}
public static FileStream OpenWrite(string path)
{
return new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
}
public static StreamReader OpenText(string path)
{
return new StreamReader(path);
}

JAVA IO的使用原则及stream 和 reader的区别


嗨 你好
ava IO的一般使用原则:
一、按数据来源(去向)分类
1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter
2、是byte:ByteArrayInputStream, ByteArrayOutputStream
3、是Char: CharArrayReader, CharArrayWriter
4、是String: StringBufferInputStream, StringReader, StringWriter
5、网络数据流:InputStream, OutputStream, Reader, Writer
二、按是否格式化输出分:
1、要格式化输出:PrintStream, PrintWriter
三、按是否要缓冲分:
1、要缓冲:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter
四、按数据格式分:
1、二进制格式(只要不能确定是纯文本的): InputStream, OutputStream及其所有带Stream结束的子类
2、纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其所有带Reader, Writer的子类
五、按输入输出分:
1、输入:Reader, InputStream类型的子类
2、输出:Writer, OutputStream类型的子类
六、特殊需要:
1、从Stream到Reader,Writer的转换类:InputStreamReader, OutputStreamWriter
2、对象输入输出:ObjectInputStream, ObjectOutputStream
3、进程间通信:PipeInputStream, PipeOutputStream, PipeReader, PipeWriter
4、合并输入:SequenceInputStream
5、更特殊的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader
决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):
首先,考虑最原始的数据格式是什么: 原则四
第二,是输入还是输出:原则五
第三,是否需要转换流:原则六第1点
第四,数据来源(去向)是什么:原则一
第五,是否要缓冲:原则三 (特别注明:一定要注意的是readLine()是否有定义,有什么比read, write更特殊的输入或输出方法)
第六,是否要格式化输出:原则二
Java中Inputstream与Reader的区别
 
Reader支持16位的Unicode字符输出,InputStream支持8位的字符输出。
Reader和InputStream分别是I/O库提供的两套平行独立的等级机构,
InputStream、OutputStream是用来处理8位元的流,
Reader、Writer是用来处理16位元的流。
而在JAVA语言中,byte类型是8位的,char类型是16位的,所以在处理中文的时候需要用Reader和Writer。
值得说明的是,在这两种等级机构下,还有一道桥梁InputStreamReader、OutputStreamWriter负责进行InputStream到Reader的适配和由OutputStream到Writer的适配。 
 
java.io.Reader 和 java.io.InputStream 组成了 Java输入类。Reader 用于读入16位字符,也就是 Unicode编码的字符;而 InputStream 用于读入 ASCII字符和二进制数据。
在 Java中,有不同类型的 Reader 输入流对应于不同的数据源:
    FileReader 用于从文件输入;
    CharArrayReader 用于从程序中的字符数组输入;
    StringReader 用于从程序中的字符串输入;
    PipedReader 用于读取从另一个线程中的 PipedWriter 写入管道的数据。
相应的也有不同类型的 InputStream 输入流对应于不同的数据源:FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream。另外,还有两种没有对应 Reader 类型的 InputStream 输入流:
    Socket 用于套接字;
    URLConnection 用于 URL 连接
这两个类使用 getInputStream() 来读取数据。
相应的,java.io.Writer 和 java.io.OutputStream 也有类似的区别。

StreamReader类的常用方法


你最好装一个MSDN
实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。
下表列出了由 StreamReader 类型公开的成员。
公共构造函数
名称 说明
StreamReader 已重载。为指定的流初始化 StreamReader 类的新实例。
页首
公共字段
名称 说明
Null 空流周围的 StreamReader。
页首
公共属性
名称 说明
BaseStream 返回基础流。
CurrentEncoding 获取当前 StreamReader 对象正在使用的当前字符编码。
EndOfStream 获取一个值,该值表示当前的流位置是否在流的末尾。
页首
公共方法 (请参见 受保护的方法 )
名称 说明
Close 已重写。 关闭 StreamReader 对象和基础流,并释放与读取器关联的所有系统资源。
CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (从 MarshalByRefObject 继承。)
DiscardBufferedData 允许 StreamReader 对象丢弃其当前数据。
Dispose 已重载。
Equals 已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。)
GetHashCode 用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 (从 Object 继承。)
GetLifetimeService 检索控制此实例的生存期策略的当前生存期服务对象。 (从 MarshalByRefObject 继承。)
GetType 获取当前实例的 Type。 (从 Object 继承。)
InitializeLifetimeService 获取控制此实例的生存期策略的生存期服务对象。 (从 MarshalByRefObject 继承。)
Peek 已重写。 返回下一个可用的字符,但不使用它。
Read 已重载。 已重写。 读取输入流中的下一个字符或下一组字符。
ReadBlock 从当前流中读取最大 count 的字符并从 index 开始将该数据写入 buffer。 (从 TextReader 继承。)
ReadLine 已重写。 从当前流中读取一行字符并将数据作为字符串返回。
ReadToEnd 已重写。 从流的当前位置到末尾读取流。
ReferenceEquals 确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。)
Synchronized 在指定 TextReader 周围创建线程安全包装。 (从 TextReader 继承。)
ToString 返回表示当前 Object 的 String。 (从 Object 继承。)
页首
受保护的方法
名称 说明
Dispose 已重载。 已重写。
Finalize 允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。 (从 Object 继承。)
MemberwiseClone 已重载。 (从 MarshalByRefObject 继承。)

C# 语言中的stream reader是什么意思


StreamReader是实现一个 TextReader,使其以一种特定的编码从字节流中读取字符
http://msdn.microsoft.com/zh-cn/library/system.io.streamreader(v=VS.80).aspx

C#中,StreamReader类的使用!


using有2种作用
1.就是用来引入命名控件
,,如
using
System.IO;
2.语句,用using定义的代码,,会在句末释放using()中说使用的资源,,。。这样可以优化系统资源。
如不用using使用文件流操作就要进行显示关闭文件流跟都写器
如:
FileStream
fs
=
File.Open(“文件名.扩展名“,
FileMode.Open,
FileAccess.Read);
StreamReader
sr=new
StreamReader(fs,
Encoding.GetEncoding(“gb2312“));
string
line=sr.ReandLine();
sr.Close();
fs.Close();

StreamReader 的定义


StreamReader SR 你定义了两次,编译当然失败了
你去掉一个,或者你这么写
StreamReader SR = new StreamReader(txt_fileName.Text, Encoding.ASCII);
。。。。
SR.Close();
StreamReader SR2 = new StreamReader(txt_fileName.Text, Encoding.Unicode);
。。。。
SR2.Close();
一个范围内是不可定义两个同名变量的
大哥你不了解编译代码的过程吗,我问你如果你是编译器,你在.cs文件里面碰到一个范围两个同名变量,你怎么区分他们?你怎么分配地址内存?你难道说他们是不同行的两个变量,哈哈。
别搞笑了,你有个问题没弄清楚,不要以为变量的内存可以close就可以再次定义一次,不可以的,记住Close方法不是清楚sr,而是关闭sr的连接,哥哥,就算你关闭了sr的连接,sr的标识还是存在的,
如果代码大量定义sr你干嘛不抽出相同部分的代码,定义新方法,
这点小弟我建议去读读《重构改善既有代码的设计》
sr需要多出定义,说明逻辑有相同部分,明显可以提取相同代码,然后新来个方法,然后替代你原先逻辑,这样你就不用多定义sr了,只要在一个方法里面定义一个sr就好了。

关于streamreader和streamwrite只能用于txt文件吗


当然可以,从单词就可看出streamreader就是流读取者,而streamwriter就是流写入者,既然是流的读写,就不会局限于txt文件,如果你会读取txt文件的话,同样也可以读图片等文件。
比如:
FileStream fs = null;
byte buffer = null;
try
{
if (File.Exists(filePath)) //图片文件的全路径字符串
{
fs = new FileStream(filePath, FileMode.Open);
buffer = new byte[fs.Length];
fs.Read(buffer, 0, int.Parse(fs.Length.ToString()));
fs.Close();
fs.Dispose();
}
}
catch
{
fs.Close();
fs.Dispose();
}
return buffer;//图片文件的流
通过以上方法就得到了指定图片文件的流
以下是从流中保存文件到本地
FileStream fs = new FileStream(fileName, FileMode.Create);//fileName是要保存到的文件路径
fs.Write(buffer, 0, buffer.Length);
fs.Dispose();

C#错误 1 “StreamReader”是“命名空间”,但此处被当做“类型”来使用


你前面没有引用StreamReader命名空间吧。
StreamReader是属于System.IO中的一个类。
如果你前面的代码没有using System.IO;来引用命名空间,你就需要这样用这个System.IO.StreamReader
例如:
System.IO.StreamReader reader = new StreamReader(fileStream, System.Text.Encoding.Default);
来声明你的变量。

streamreade命令r 需要使用哪个 using命名空间


StreamReader是文件流对象,需要导入System.IO命名空间

        在读写文件的过程中,Filestream只可以进行以字节为单位原始数据流进行读写操作,为此,C#中提供了功能更加强大的StreamReader/ StreamWriter来支持文件的读写. StreamReader/ StreamWriter可以进行以字符为单位的数据读写操作.

一. 用StreamReader的构造函数

StreamReader有很多的构造函数:在这里只列出两个常用和比较常见的

StreamReader  sr=new StreamReader (Stream); Stream可以是Filestream;
StreamReader  sr=new StreamReader (String); String为指定的文件名初始化 StreamReader 类的新实例。
例如:
//demo1
FileStream filest = new FileStream(@“c:\abc.txt“, FileMode.Open, FileAccess.ReadWrite); StreamReader sr = new StreamReader(filest);
//demo2
StreamReader another = new StreamReader(@“c:\abc.txt“);
两个StreamReader都指向同一个文件.

StreamReader读取文件中的数据的代码:

FileStream filest = new FileStream(@“c:\abc.txt“, FileMode.Open, FileAccess.ReadWrite);
StreamReader sr = new StreamReader(filest);
string strLine = sr.ReadLine();//读取文件中的一行
while(strLine!=null)//判断是否为空,表示到文件最后一行了
{
Console.WriteLine(strLine);
strLine = sr.ReadLine();
}
sr.Close();//关闭流
filest.Close();

二. StreamWriter

StreamWriter 专门用于的向文件中写数据的,它和StreamReader类似,只是一个负责向文件中写数据,一个负责向文件中读数据而已.

StreamWriter 构造函数也有很多.在这里只举例两个构造函数.

StreamWriter  sr=new StreamWriter (Stream); Stream可以是Filestream;
StreamWriter  sr=new StreamWriter (String); String为指定的文件名初始化StreamWriter 类的新实例。
例如:
//demo1
FileStream filest = new FileStream(@“c:\abc.txt“, FileMode.Open, FileAccess.ReadWrite); StreamWriter sw = new StreamWriter (filest);
//demo2
StreamWriter another = new StreamWriter (@“c:\abc.txt“);

StreamWriter向文件写入数据的例子:

FileStream filewriter = new FileStream(@“C:\abc.txt“, FileMode.Append, FileAccess.Write);
以追加的方式打开文件,并进行写入操作.
StreamWriter sw = new StreamWriter(filewriter); 构造函数;
for (char mychar = ’a’; mychar 《= ’z’; mychar++)
{
sw.Write(mychar);//将从a—z26个小写字母写入文件中.
}
sw.Close();filewriter.Close();
//demo
FileStream filest = new FileStream(@“c:\abc.txt“, FileMode.Open, FileAccess.ReadWrite);
StreamReader sr = new StreamReader(filest);
string strLine = sr.ReadLine();
while(strLine!=null)
{
Console.WriteLine(strLine);
strLine = sr.ReadLine();
}
sr.Close();
filest.Close();

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部