.net中對象序列化技術淺談 (轉)

原文:http://blog.csdn.net/zhoufoxcn/archive/2009/03/11/3978874.aspx?

.net中對象序列化技術淺談 (轉)
序列化是將對象狀態轉換為可保持或傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換為對象。這兩個過程結合起來,可以輕松地存儲和傳輸數據。例如,可以序列化一個對象,然后使用 HTTP 通過 Internet 在客戶端和服務器之間傳輸該對象。反之,反序列化根據流重新構造對象。此外還可以將對象序列化后保存到本地,再次運行的時候可以從本地文件中“恢復”對象到序列化之前的狀態。
在.net中有提供了幾種序列化的方式:
二進制序列化
XML序列化
SOAP序列化

二進制序列化
所謂二進制序列化,指的是對象序列化之后是二進制形式的。二進制序列化是通過BinaryFormatter類來實現的,這個類位于System.Runtime.Serialization.Formatters.Binary命名空間下。

XML序列化
所謂XML序列化,是指對象序列化之后的結果是XML形式的。保存XML序列化是通過XmlSerializer 類來實現的, 這個類位于System.Xml.Serialization命名空間下。

SOAP序列化
所謂SOAP序列化是指對象序列化之后的結果符合SOAP協議,也就是可以通過SOAP協議傳輸(不知道SOAP協議?百度一下吧)。SOAP序列化是通過SoapFormatter類來實現的,這個類位于System.Runtime.Serialization.Formatters.Soap命名空間下,并且需要注意需要手動添加對這個命名空間的引用,如下圖所示:
?

下面編寫一個類用于序列化和反序列化,這個類的代碼如下:

using System;??
using System.Collections.Generic;??
using System.Text;??
?
namespace MySerializeDemo??
{??
??? [Serializable]??
??? /// <summary>??
??? /// 要序列化的對象??
??? /// 作者:周公??
??? /// 編寫時間:2009-03-10??
??? /// </summary>??
??? public class MyObject??
??? {??
??????? //[NonSerialized]??
??????? private string name;??
??????? private DateTime birthday;??
??????? private string homePlace;??
??????? /// <summary>??
??????? /// 出生地??
??????? /// </summary>??
??????? public string HomePlace??
??????? {??
??????????? get { return homePlace; }??
??????????? set { homePlace = value; }??
??????? }??
???
??????? /// <summary>??
??????? /// 生日??
??????? /// </summary>??
??????? public DateTime Birthday??
??????? {??
??????????? get { return birthday; }??
??????????? set { birthday = value; }??
??????? }??
???
??????? /// <summary>??
??????? /// 姓名??
??????? /// </summary>??
??????? public string Name??
??????? {??
??????????? get { return name; }??
??????????? set { name = value; }??
??????? }??
???
??????? /// <summary>??
??????? /// 年齡??
??????? /// </summary>??
??????? public int Age??
??????? {??
??????????? get { return DateTime.Now.Year - birthday.Year; }??
??????? }??
??????? /// <summary>??
??????? /// override了ToString()方法??
??????? /// </summary>??
??????? /// <returns></returns>??
??????? public override string ToString()??
??????? {??
??????????? return string.Format("姓名:{0},生日:{1},出生地:{2},年齡:{3}",name,birthday,homePlace,Age);??
??????? }??
???
??? }??
}?
using System;
using System.Collections.Generic;
using System.Text;

namespace MySerializeDemo
{
??? [Serializable]
??? /// <summary>
??? /// 要序列化的對象
??? /// 作者:周公
??? /// 編寫時間:2009-03-10
??? /// </summary>
??? public class MyObject
??? {
??????? //[NonSerialized]
??????? private string name;
??????? private DateTime birthday;
??????? private string homePlace;
??????? /// <summary>
??????? /// 出生地
??????? /// </summary>
??????? public string HomePlace
??????? {
??????????? get { return homePlace; }
??????????? set { homePlace = value; }
??????? }
?
??????? /// <summary>
??????? /// 生日
??????? /// </summary>
??????? public DateTime Birthday
??????? {
??????????? get { return birthday; }
??????????? set { birthday = value; }
??????? }
?
??????? /// <summary>
??????? /// 姓名
??????? /// </summary>
??????? public string Name
??????? {
??????????? get { return name; }
??????????? set { name = value; }
??????? }
?
??????? /// <summary>
??????? /// 年齡
??????? /// </summary>
??????? public int Age
??????? {
??????????? get { return DateTime.Now.Year - birthday.Year; }
??????? }
??????? /// <summary>
??????? /// override了ToString()方法
??????? /// </summary>
??????? /// <returns></returns>
??????? public override string ToString()
??????? {
??????????? return string.Format("姓名:{0},生日:{1},出生地:{2},年齡:{3}",name,birthday,homePlace,Age);
??????? }
?
??? }
}
下面是分別用上面的三個類進行序列化和反序列化的代碼:

view plaincopy to clipboardprint?
using System;??
using System.Collections.Generic;??
using System.Text;??
using System.IO;??
using System.Runtime.Serialization.Formatters;??
using System.Runtime.Serialization.Formatters.Binary;??
using System.Runtime.Serialization.Formatters.Soap;??
using System.Xml.Serialization;??
?
namespace MySerializeDemo??
{??
??? class Program??
??? {??
??????? static void Main(string[] args)??
??????? {??
??????????? MyObject obj = new MyObject();??
??????????? obj.Birthday = new DateTime(1979, 11, 7);??
??????????? obj.HomePlace = "湖北";??
??????????? obj.Name = "周公";??
??????????? Console.WriteLine("========使用BinaryFormatter類進行序列化和反序列化。====");??
??????????? BinarySerialize(obj);??
??????????? BinaryDeserialize("C:\\MyObject.dat");??
??????????? Console.WriteLine("========使用SoapFormatter類進行序列化和反序列化。====");??
??????????? SOAPSerialize(obj);??
??????????? SOAPDeserialize("C:\\MyObject.soap");??
??????????? Console.WriteLine("========使用XmlSerializer類進行序列化和反序列化。====");??
??????????? XMLSerialize(obj);??
??????????? XMLDeserialize("C:\\MyObject.xml");??
??????? }??
??????? /// <summary>??
??????? /// 二進制序列化對象??
??????? /// </summary>??
??????? /// <param name="obj"></param>??
??????? public static void BinarySerialize(MyObject obj)??
??????? {??
??????????? using (FileStream stream = new FileStream("C:\\MyObject.dat", FileMode.Create, FileAccess.Write))??
??????????? {??
??????????????? BinaryFormatter formater = new BinaryFormatter();??
??????????????? formater.Serialize(stream, obj);??
??????????????? Console.WriteLine("對象已經被序列化。" + obj.ToString());??
??????????? }??
??????? }??
??????? /// <summary>??
??????? /// 二進制反序列化??
??????? /// </summary>??
??????? /// <param name="fileName"></param>??
??????? public static void BinaryDeserialize(string fileName)??
??????? {??
??????????? using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))??
??????????? {??
??????????????? BinaryFormatter formater = new BinaryFormatter();??
??????????????? MyObject obj=(MyObject)formater.Deserialize(stream);??
??????????????? Console.WriteLine("對象已經被反序列化。" + obj.ToString());??
??????????? }??
??????? }??
?
??????? /// <summary>??
??????? /// 二進制序列化對象??
??????? /// </summary>??
??????? /// <param name="obj"></param>??
??????? public static void SOAPSerialize(MyObject obj)??
??????? {??
??????????? using (FileStream stream = new FileStream("C:\\MyObject.soap", FileMode.Create, FileAccess.Write))??
??????????? {??
??????????????? SoapFormatter formater = new SoapFormatter();??
??????????????? formater.Serialize(stream, obj);??
??????????????? Console.WriteLine("對象已經被序列化。" + obj.ToString());??
??????????? }??
??????? }??
??????? /// <summary>??
??????? /// 二進制反序列化??
??????? /// </summary>??
??????? /// <param name="fileName"></param>??
??????? public static void SOAPDeserialize(string fileName)??
??????? {??
??????????? using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))??
??????????? {??
??????????????? SoapFormatter formater = new SoapFormatter();??
??????????????? MyObject obj = (MyObject)formater.Deserialize(stream);??
??????????????? Console.WriteLine("對象已經被反序列化。" + obj.ToString());??
??????????? }??
??????? }??
??????? /// <summary>??
??????? /// XML序列化??
??????? /// </summary>??
??????? /// <param name="obj"></param>??
??????? public static void XMLSerialize(MyObject obj)??
??????? {??
??????????? using (FileStream stream = new FileStream("C:\\MyObject.xml", FileMode.Create, FileAccess.Write))??
??????????? {??
??????????????? XmlSerializer serializer = new XmlSerializer(typeof(MyObject));??
??????????????? serializer.Serialize(stream, obj);??
??????????????? Console.WriteLine("對象已經被序列化。" + obj.ToString());??
??????????? }??
??????? }??
??????? /// <summary>??
??????? /// XML反序列化??
??????? /// </summary>??
??????? /// <param name="fileName"></param>??
??????? public static void XMLDeserialize(string fileName)??
??????? {??
??????????? using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))??
??????????? {??
??????????????? XmlSerializer serializer = new XmlSerializer(typeof(MyObject));??
??????????????? MyObject obj = (MyObject)serializer.Deserialize(stream);??
??????????????? Console.WriteLine("對象已經被反序列化。" + obj.ToString());??
??????????? }??
??????? }??
??? }??
}?
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Xml.Serialization;

namespace MySerializeDemo
{
??? class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? MyObject obj = new MyObject();
??????????? obj.Birthday = new DateTime(1979, 11, 7);
??????????? obj.HomePlace = "湖北";
??????????? obj.Name = "周公";
??????????? Console.WriteLine("========使用BinaryFormatter類進行序列化和反序列化。====");
??????????? BinarySerialize(obj);
??????????? BinaryDeserialize("C:\\MyObject.dat");
??????????? Console.WriteLine("========使用SoapFormatter類進行序列化和反序列化。====");
??????????? SOAPSerialize(obj);
??????????? SOAPDeserialize("C:\\MyObject.soap");
??????????? Console.WriteLine("========使用XmlSerializer類進行序列化和反序列化。====");
??????????? XMLSerialize(obj);
??????????? XMLDeserialize("C:\\MyObject.xml");
??????? }
??????? /// <summary>
??????? /// 二進制序列化對象
??????? /// </summary>
??????? /// <param name="obj"></param>
??????? public static void BinarySerialize(MyObject obj)
??????? {
??????????? using (FileStream stream = new FileStream("C:\\MyObject.dat", FileMode.Create, FileAccess.Write))
??????????? {
??????????????? BinaryFormatter formater = new BinaryFormatter();
??????????????? formater.Serialize(stream, obj);
??????????????? Console.WriteLine("對象已經被序列化。" + obj.ToString());
??????????? }
??????? }
??????? /// <summary>
??????? /// 二進制反序列化
??????? /// </summary>
??????? /// <param name="fileName"></param>
??????? public static void BinaryDeserialize(string fileName)
??????? {
??????????? using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
??????????? {
??????????????? BinaryFormatter formater = new BinaryFormatter();
??????????????? MyObject obj=(MyObject)formater.Deserialize(stream);
??????????????? Console.WriteLine("對象已經被反序列化。" + obj.ToString());
??????????? }
??????? }

??????? /// <summary>
??????? /// 二進制序列化對象
??????? /// </summary>
??????? /// <param name="obj"></param>
??????? public static void SOAPSerialize(MyObject obj)
??????? {
??????????? using (FileStream stream = new FileStream("C:\\MyObject.soap", FileMode.Create, FileAccess.Write))
??????????? {
??????????????? SoapFormatter formater = new SoapFormatter();
??????????????? formater.Serialize(stream, obj);
??????????????? Console.WriteLine("對象已經被序列化。" + obj.ToString());
??????????? }
??????? }
??????? /// <summary>
??????? /// 二進制反序列化
??????? /// </summary>
??????? /// <param name="fileName"></param>
??????? public static void SOAPDeserialize(string fileName)
??????? {
??????????? using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
??????????? {
??????????????? SoapFormatter formater = new SoapFormatter();
??????????????? MyObject obj = (MyObject)formater.Deserialize(stream);
??????????????? Console.WriteLine("對象已經被反序列化。" + obj.ToString());
??????????? }
??????? }
??????? /// <summary>
??????? /// XML序列化
??????? /// </summary>
??????? /// <param name="obj"></param>
??????? public static void XMLSerialize(MyObject obj)
??????? {
??????????? using (FileStream stream = new FileStream("C:\\MyObject.xml", FileMode.Create, FileAccess.Write))
??????????? {
??????????????? XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
??????????????? serializer.Serialize(stream, obj);
??????????????? Console.WriteLine("對象已經被序列化。" + obj.ToString());
??????????? }
??????? }
??????? /// <summary>
??????? /// XML反序列化
??????? /// </summary>
??????? /// <param name="fileName"></param>
??????? public static void XMLDeserialize(string fileName)
??????? {
??????????? using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
??????????? {
??????????????? XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
??????????????? MyObject obj = (MyObject)serializer.Deserialize(stream);
??????????????? Console.WriteLine("對象已經被反序列化。" + obj.ToString());
??????????? }
??????? }
??? }
}
這個程序的運行效果如下:
?
可見通過上面三個類都能實現將對象序列化保存,并且都能反序列化還原到對象被序列化之前的狀態(這正是序列化意義所在,能保存對象運行時的狀態并且還能還原)。如果運行上面的代碼會在C盤根目錄下創建三個文件,分別是MyObject.dat、MyObject.soap和MyObject.xml文件,因為MyObject.dat是二進制文件,所以無法查看文件的內容,但是我們可以打開MyObject.soap和MyObject.xml這兩個文件來比較一下有什么區別。
MyObject.soap文件的后綴雖然是.soap,但是還是可以用記事本打開的,下面是MyObject.soap文件的內容:
view plaincopy to clipboardprint?
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">?
<SOAP-ENV:Body>?
<a1:MyObject id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/MySerializeDemo/MySerializeDemo%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">?
<name id="ref-3">周公</name>?
<birthday>1979-11-07T00:00:00.0000000+08:00</birthday>?
<homePlace id="ref-4">湖北</homePlace>?
</a1:MyObject>?
</SOAP-ENV:Body>?
</SOAP-ENV:Envelope>?
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<a1:MyObject id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/MySerializeDemo/MySerializeDemo%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<name id="ref-3">周公</name>
<birthday>1979-11-07T00:00:00.0000000+08:00</birthday>
<homePlace id="ref-4">湖北</homePlace>
</a1:MyObject>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
MyObject.xml文件也可以用記事本打開,它的內容如下:

view plaincopy to clipboardprint?
<?xml version="1.0"?>?
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">?
? <HomePlace>湖北</HomePlace>?
? <Birthday>1979-11-07T00:00:00</Birthday>?
? <Name>周公</Name>?
</MyObject>?
<?xml version="1.0"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
? <HomePlace>湖北</HomePlace>
? <Birthday>1979-11-07T00:00:00</Birthday>
? <Name>周公</Name>
</MyObject>
熟悉SOAP協議的朋友一看MyObject.soap文件的內容就知道它符合SOAP協議,MyObject.xml文件毫無疑問是一個符合XML規范的文件。

對代碼作幾點說明:
1、如果采用BinaryFormatter類或者SoapFormatter類來實現序列化,則一定要給類加上Serializable屬性,如代碼中所示:
view plaincopy to clipboardprint?
[Serializable]??
??? /// <summary>??
??? /// 要序列化的對象??
??? /// 作者:周公??
??? /// 編寫時間:2009-03-10??
??? /// </summary>??
??? public class MyObject?
[Serializable]
??? /// <summary>
??? /// 要序列化的對象
??? /// 作者:周公
??? /// 編寫時間:2009-03-10
??? /// </summary>
??? public class MyObject
如果不給要序列化的對象加上這個屬性,那么采用采用BinaryFormatter類或者SoapFormatter類來實現序列化時會報異常,但使用XmlSerializer 類序列化對象時可以不用這個屬性。
2、另外,如果不想序列化某個字段,可以給其加上NonSerialized屬性,這樣在序列化時就不會保存這個這個字段的值了,比如不想序列化name這個字段,可以如下寫代碼:

view plaincopy to clipboardprint?
…//其它代碼??
//[NonSerialized]??
private string name;??
…//其它代碼?
…//其它代碼
//[NonSerialized]
private string name;
…//其它代碼
再次運行剛才的程序會得到如下效果:
?
看有黃色底線部分,因為name字段不被序列化,所以通過二進制序列化和SOAP序列化之后再反序化就得不到原來的值了。
3、最后還需要說明一點的是,SoapFormatter類在.net3.5開始已經過時了,微軟建議使用BinaryFormatter類來序列化和反序列化了。

周公
2009-03-11 0:17


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zhoufoxcn/archive/2009/03/11/3978874.aspx

轉載于:https://www.cnblogs.com/fightLonely/archive/2010/05/26/1744209.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379206.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

遞歸-輸出字符串所有的組合情況(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; #include <stdio.h>/*程序描述&#xff1a;輸出字符串所有的組合情況使用permutation函數進行將指定的下標值&#xff0c;與最大下標值這個范圍的每個下標值進行交換每調用一次permu…

課本例子代碼第四章

【例4.1】設計一個控制臺應用程序&#xff0c;采用二分查找方法在給定的有序數組a中查找用戶輸入的值&#xff0c;并提示相應的查找結果。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace C…

一個簡單的python日志服務器

一個簡單的python日志服務器&#xff0c;主要目的是搜集各python logging記錄的日志&#xff0c;將其簡單匯總。源碼如下&#xff1a; # -*- coding: utf-8 -*-Created on 2012-06-14 19:50 summary: a simple logging server. use gevent and logging modules author: JerryK…

c#中queue_C#中的Queue.Enqueue()方法示例

c#中queueC&#xff03;Queue.Enqueue()方法 (C# Queue.Enqueue() method) Queue.Enqueue() method is used to add an object/element at the end of the Queue. Queue.Enqueue()方法用于在Queue的末尾添加一個對象/元素。 Syntax: 句法&#xff1a; void Queue.Enqueue(Obj…

C#調用Web Service時的身份驗證

轉自&#xff1a;http://www.anqn.com/dev/vc/2010-01-23/a09122769.shtml 在項目開發&#xff0c;我們經常會使用WebService&#xff0c;但在使用WebService時我們經常會考慮以下問題&#xff1a;怎么防止別人訪問我的WebService?從哪里引用我的WebService?對于第一個問題&a…

遞歸-計算字符串長度(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; main.c #include <stdio.h>//該程序用遞歸計算字符串長度int strlen(const char* s) {if( s NULL ){return -1;}else if( *s \0 ){return 0;}else{return strlen(s1) 1;} }int m…

Java LinkedList void clear()方法與示例

LinkedList void clear()方法 (LinkedList void clear() method) This method is available in package java.util.Collection and here, Collection is an interface. 該方法在java.util.Collection包中可用&#xff0c;在這里&#xff0c; Collection是一個接口。 This metho…

Python-楊輝三角

在控制臺輸出如圖所示一個8層的楊輝三角。 楊輝三角介紹&#xff1a; 每個數等于它上方兩數之和 每行數字左右對稱&#xff0c;由1開始逐漸變大 第n行的數字有n項&#xff0c;將n取8 def yanghui(n):l[1,1]for x in range(1,n):for a in range(x):l[a]l[a]l[a1]l.insert(0,1)…

如何向妻子解釋OOD(轉)

前言 此文譯自CodeProject上<How I explained OOD to my wife>一文&#xff0c;該文章在Top Articles上排名第3&#xff0c;讀了之后覺得非常好&#xff0c;就翻譯出來&#xff0c;供不想讀英文的同學參考學習。 作者(Shubho)的妻子(Farhana)打算重新做一名軟件工程師(她…

不安全代碼和指針資料匯編

不安全代碼和指針&#xff08;C# 編程指南&#xff09;為了保持類型安全&#xff0c;默認情況下&#xff0c;C# 不支持指針運算。不過&#xff0c;通過使用 unsafe 關鍵字&#xff0c;可以定義可使用指針的不安全上下文。有關指針的更多信息&#xff0c;請參見主題指針類型。 注…

ffmpeg-從flv文件中提取AAC音頻數據保存為文件

AAC ADTS格式協議&#xff1a; 從flv文件中提取AAC音頻數據保存為文件。 如果需要詳細了解AAC ADTS格式&#xff0c;可以查詢文檔。 原文件&#xff1a; 提取aac文件&#xff1a; main.c #include <stdio.h> #include <libavutil/log.h>> #include <lib…

Python-統計《水調歌頭·明月幾時有》字符出現次數。

統計《水調歌頭明月幾時有》字符出現次數。 明月幾時有&#xff0c;把酒問青天。 不知天上宮闕&#xff0c;今夕是何年&#xff1f; 我欲乘風歸去&#xff0c;又恐瓊樓玉宇&#xff0c;高處不勝寒。 起舞弄清影&#xff0c;何似在人間&#xff01; 轉朱閣&#xff0c;低綺戶&am…

Linux網絡編程入門 (轉載)

(一)Linux網絡編程--網絡知識介紹 Linux網絡編程--網絡知識介紹客戶端和服務端 網絡程序和普通的程序有一個最大的區別是網絡程序是由兩個部分組成的--客戶端和服務器端. 客戶端 在網絡程序中&#xff0c;如果一個程序主動和外面的程序通信&#xff0c;那么我們…

在Python中將字符串拆分為字符數組

Given a string and we have to split into array of characters in Python. 給定一個字符串&#xff0c;我們必須在Python中拆分為字符數組。 將字符串拆分為字符 (Splitting string to characters) 1) Split string using for loop 1)使用for循環分割字符串 Use for loop t…

SQL表值函數和標量值函數的區別 [轉]

SQL表值函數和標量值函數的區別 寫sql存儲過程經常需要調用一些函數來使處理過程更加合理&#xff0c;也可以使函數復用性更強&#xff0c;不過在寫sql函數的時候可能會發現&#xff0c;有些函數是在表值函數下寫的有些是在標量值下寫的&#xff0c;區別是表值函數只能返回一個…

N Queen(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; main.c #include <stdio.h>/* 程序描述&#xff1a;輸出N*N中符合左右對角線與上下左右方向都沒被使用的位置在每一行的所有情況使用檢測左上角&#xff0c;正上角&#xff0c;右上…

kotlin 計算平方_Kotlin程序計算自然數之和

kotlin 計算平方Given a number number, and we have to calculate the sum of all natural numbers from 1 to number. 鑒于一些數字 &#xff0c;我們必須從1計算所有自然數的總和數量 。 Example: 例&#xff1a; Input:number 15Output:120用于計算Kotlin中自然數之和的…

Python-身份證核對

中華人民共和國居民身份證號碼由17 位數字和1位校驗碼組成。其中&#xff0c;前6位為所在地編號&#xff0c;第7~14 位為出生年月日&#xff0c;第15~17位為登記流水號&#xff0c;其中第17位偶數為女性&#xff0c;奇數為男性。校驗碼的生成規則如下: 將前面的身份證號碼17位數…

VC 加載套接字庫

//加載套接字庫 WORD wVersionRequested;//套接字庫版本信息 WSADATA wsaData; int err; wVersionRequested MAKEWORD(1,1); err WSAStartup(wVersionRequested,&wsaData); if(err ! 0){ //加載失敗 return; } if(LOBYTE(wsaData.wVersion) ! 1 || //判斷是不是所請求的…

統計各種字符個數

#include <stdio.h> #include <conio.h>int main(int argc, char * argv[]) {char ch;int letters 0, space 0, digit 0, others 0;printf("請輸入一組字符串:\n");while((chgetchar())!\n){if(ch>a && ch < z || ch >A &&…