C\#대상 지구 화 상세 설명

7661 단어 C#대상
대상 지속 화 는 메모리 에 있 는 대상 을 영구적 으로 저장 할 수 있 는 저장 장치(예 를 들 어 디스크)에 저장 하 는 기술 을 말한다.
본 고 는 데이터 베 이 스 를 제외 한 몇 가지 대상 의 지속 화 방식 을 소개 한다.
구체 적 으로 다음 과 같다.
4.567917.텍스트 로 저장:메모리 대상 을 바이트 흐름 으로 텍스트 에 저장 합 니 다
  • Xml 로 직렬 화:대상 을 Xml 형식 으로 저장 합 니 다
  • 4.567917.Json 으로 직렬 화:대상 을 Json 대상 으로 직렬 화 한 다음 에 저장 합 니 다4.567917.시퀀스 를 바 이 너 리 로 바 꿉 니 다.대상 시퀀스 를 바 이 너 리 바이트 로 바 꾸 어 파일 에 저장 합 니 다관련 지식 포인트:
    4.567917.직렬 화 와 반 직렬 화파일 흐름 의 읽 기와 쓰기ListView 는 복선 상 자 를 표시 하고 가로로 배열 합 니 다다음 그림 에서 보 듯 이[주요 기능 은 사용자 가 입력 한 정 보 를 여러 가지 형식 으로 저장 하고 각 문서 에서 읽 는 것 입 니 다]:

    텍스트 문서 코드 저장 및 읽 기:
    
    /// <summary>
      ///      
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnSaveTxt_Click(object sender, EventArgs e)
      {
       Dictionary<string, string> dicInfos = GetDictionaryInfos();
       string filePath = "objPerson.txt";
       //  using   ,     
       using (FileStream fs = new FileStream(filePath, FileMode.Create))
       {
        using (StreamWriter sw = new StreamWriter(fs, Encoding.Default))
        {
         foreach (var keyPair in dicInfos)
         {
          sw.WriteLine(string.Format("{0}={1}", keyPair.Key, keyPair.Value));
         }
        }
       }
      }
      /// <summary>
      ///       
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnReadTxt_Click(object sender, EventArgs e)
      {
       string filePath = "objPerson.txt";
       Dictionary<string, string> dic = new Dictionary<string, string>();
       //  using   ,     
       using (FileStream fs = new FileStream(filePath, FileMode.Open))
       {
        using (StreamReader sw = new StreamReader(fs, Encoding.Default))
        {
         while (!sw.EndOfStream) {
          string lineInfo = sw.ReadLine();
          dic.Add(lineInfo.Split('=')[0], lineInfo.Split('=')[1]);
         }
        }
       }
       this.txtName.Text = dic["Name"];
       this.dtBirthday.Text = dic["Birthday"];
       if (dic["Gender"] == this.rbBoy.Text)
       {
        this.rbBoy.Checked = true;
       }
       else {
        this.rbGirl.Checked = true;
       }
       string[] loves = dic["Love"].Split('|');
       foreach (var love in loves)
       {
        foreach (var item in this.lsvLove.Items)
        {
         ListViewItem li = item as ListViewItem;
         if (li.Text == love)
         {
          li.Checked = true;
         }
        }
       }
      }
    
    Xml 문서 코드 를 다음 과 같이 저장 하고 읽 습 니 다.
    
    /// <summary>
      ///    Xml
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnSaveXml_Click(object sender, EventArgs e)
      {
       Person p = GetPersonInfos();
       string filePath = "objPerson.xml";
       using (FileStream fs = new FileStream(filePath, FileMode.Create))
       {
        XmlSerializer serializer = new XmlSerializer(typeof(Person));
        serializer.Serialize(fs, p);
       }
      }
      /// <summary>
      ///  Xml   
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnReadXml_Click(object sender, EventArgs e)
      {
       string filePath = "objPerson.xml";
       Person p;
       using (FileStream fs = new FileStream(filePath, FileMode.Open))
       {
        XmlSerializer serializer = new XmlSerializer(typeof(Person));
        object obj= serializer.Deserialize(fs);
        p = obj as Person;
       }
       SetPersonInfos(p);
      }
    
    JSon 문 서 를 다음 과 같이 저장 하고 읽 습 니 다.
    
    /// <summary>
      ///    Json
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnSaveJson_Click(object sender, EventArgs e)
      {
       Person p = GetPersonInfos();
       JavaScriptSerializer jserializer = new JavaScriptSerializer();
       string strJson = jserializer.Serialize(p);
       string strRegex = @"\\/Date\((\d+)\)\\/";
       MatchEvaluator evaluator = new MatchEvaluator(ConvertJsonDateToDateString);
    
       //       ,    System.Text.RegularExpressions;    
       Regex reg = new Regex(strRegex);
       strJson = reg.Replace(strJson, evaluator);
       string filePath = "objPerson.json";
       using (FileStream fs = new FileStream(filePath, FileMode.Create))
       {
        using (StreamWriter sw = new StreamWriter(fs, Encoding.Default))
        {
         sw.Write(strJson);
        }
       }
      }
      /// <summary>
      ///  Json   
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnReadJson_Click(object sender, EventArgs e)
      {
       JavaScriptSerializer jserializer = new JavaScriptSerializer();
       string filePath = "objPerson.json";
       Person p;
       using (FileStream fs = new FileStream(filePath, FileMode.Open))
       {
        using (StreamReader sw = new StreamReader(fs, Encoding.Default))
        {
         string strJson = sw.ReadToEnd();
         string strRegex = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
         MatchEvaluator evaluator = new MatchEvaluator(ConvertDateStringToJsonDate); //       
         Regex reg = new Regex(strRegex);
         strJson = reg.Replace(strJson, evaluator);
         p = jserializer.Deserialize<Person>(strJson);
        }
       }
       SetPersonInfos(p);
      }
    
    Bin 문 서 를 다음 과 같이 저장 하고 읽 습 니 다.
    
    /// <summary>
      ///         
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnSaveBin_Click(object sender, EventArgs e)
      {
       Person p = GetPersonInfos();
       string filePath = "objPerson.bin";
       using (FileStream fs = new FileStream(filePath, FileMode.Create)) {
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(fs, p);
       }
      }
      /// <summary>
      ///        
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnReadBin_Click(object sender, EventArgs e)
      {
       string filePath = "objPerson.bin";
       Person p;
       using (FileStream fs = new FileStream(filePath, FileMode.Open))
       {
        BinaryFormatter bf = new BinaryFormatter();
        p= bf.Deserialize(fs) as Person;
       }
       SetPersonInfos(p);
      }
    
    비고:사실 대상 의 지구 화 와 대상 의 서열 화 는 두 가지 서로 다른 개념 이다.둘 은 관련 이 있 지만 다르다.
    대상 지속 화:대상 을 실체 저장 매체 에 저장 하고 대상 의 생명주기 가 끝 난 후에 재현 할 수 있 도록 합 니 다.
    대상 직렬 화:대상 이나 데이터 구 조 를 특정한 형식 으로 바 꾸 어 네트워크 에서 전송 하거나 메모리 나 파일 에 저장 할 수 있 도록 합 니 다.
    이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

    좋은 웹페이지 즐겨찾기