1.Path和File是System.IO下面的两个静态类,可以用鼠标操作的动作都可以用这两个类来进行操作。
2.File读取文件时是一次性将文件全部读取到内存,所以如果文件过大是不适合用File来读取的。
此时使用FileStream的形式。FileStream是字节级别的操作。
3.StreamWriter和StreamReader可以操作字符。当然可以用Stream来操作字节。
4.文件读写时在析构函数中需要关闭资源,也可以用using 语法来自动释放
using(fileStream fs = new FileStream("addsa"))
{
fs操作;
}
5.用FileStream.seek功能可以将文件指针定位到想要读取,写入的位置。
6.sealed 密封可以修饰类,不让其被继承。也可以修饰子类中override父类的函数,
此时在孙类中就不可以继续Override上一级类的函数啦。
7.序列化 将对象转换为2进制,反序列化则将二进制还原为对象。一个类如果想具备序列化能力跟Java类似需要
《完》
2.File读取文件时是一次性将文件全部读取到内存,所以如果文件过大是不适合用File来读取的。
此时使用FileStream的形式。FileStream是字节级别的操作。
3.StreamWriter和StreamReader可以操作字符。当然可以用Stream来操作字节。
4.文件读写时在析构函数中需要关闭资源,也可以用using 语法来自动释放
using(fileStream fs = new FileStream("addsa"))
{
fs操作;
}
5.用FileStream.seek功能可以将文件指针定位到想要读取,写入的位置。
6.sealed 密封可以修饰类,不让其被继承。也可以修饰子类中override父类的函数,
此时在孙类中就不可以继续Override上一级类的函数啦。
7.序列化 将对象转换为2进制,反序列化则将二进制还原为对象。一个类如果想具备序列化能力跟Java类似需要
用Serializable标记。如果未标记则会抛出异常。
using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
public static void Main(string[] args)
{
Person p = new Person("Lily");
Console.WriteLine(p);
FileStream fs = new FileStream("object", FileMode.OpenOrCreate, FileAccess.ReadWrite);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, p); //序列化后,调用fs流写入到文件中。
fs.Seek(0, SeekOrigin.Begin);
Person p2 = (Person)bf.Deserialize(fs); //反序列化,调用fs流将对象从文件中读出。
Console.WriteLine(p2);
fs.Close();
}
}
[Serializable]
class Person
{
private string _name;
public Person(string name)
{
this.Name = name;
}
public string Name
{
set { this._name = value; }
get { return this._name; }
}
override public string ToString()
{
return this.Name;
}
}
}
《完》