4.4 C++ Boost 数据集序列化库

这篇具有很好参考价值的文章主要介绍了4.4 C++ Boost 数据集序列化库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程,提高代码质量和性能,并且可以适用于多种不同的系统平台和编译器。Boost库已被广泛应用于许多不同领域的C++应用程序开发中,如网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。

Boost库提供了一组通用的数据序列化和反序列化库,包括archive、text_oarchive、text_iarchive、xml_oarchive、xml_iarchive等。可用于许多数据类型的持久化和传输。使用这些库,我们可以轻松地将各种数据类型序列化到文件或流中,并从文件或流中反序列化数据。

4.1 针对文本的序列化

文本序列化是将程序中的数据结构以文本的形式进行编码并持久化的过程,以便在需要时可以进行解码并重新构造出这个数据结构。在实际开发中,我们经常需要使用文本序列化技术来保存程序状态、交换数据以及网络传输等。

Boost库中提供了一组非常方便的序列化工具来处理各种类型的序列化,这些工具可以轻松地将数据从内存中打包创建成字符串,反序列化则是反之。针对文本的序列化技术还可为数据结构提供良好的兼容性,可以用于跨操作系统和语言的数据序列化。

#include <iostream>
#include <fstream>

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>

void txt_save(std::string path,std::string save_string)
{
  std::ofstream ptr(path);
  boost::archive::text_oarchive archive(ptr);

  std::string string = save_string;
  archive << string;
}

std::string txt_load(std::string path)
{
  std::ifstream ptr(path);
  boost::archive::text_iarchive iarchive(ptr);
  std::string string;

  iarchive >> string;
  return string;
}

int main(int argc, char * argv[])
{
  // 文本格式序列化与反序列化
  std::string save = "hello lyshark \n";
  txt_save("c://txt_save.txt",save);

  std::string text_load = txt_load("c://txt_save.txt");
  std::cout << "输出字符串: " << text_load << std::endl;

  system("pause");
  return 0;
}

4.2 针对数组的序列化

针对数组的序列化是一种将数组数据结构进行持久化和传输的序列化技术,它可以将数组中的数据转化为二进制流,使得其可以被传输和存储。在实际开发中,我们经常需要进行数组的序列化操作,以便在需要时可以恢复出该数组的数据。Boost库中提供了一组非常方便的序列化工具,可以轻松地将数组从内存中打包创建成字符串,反序列化则是反之。

在本节中,我们将重点介绍Boost库中针对数组的序列化相关概念和用法,包括如何使用Boost.Serialization进行数组序列化和反序列化操作、如何定义自定义数组序列化函数、如何处理多维数组以及如何进行特定数据类型的序列化等。通过本节的学习,读者可掌握Boost库中针对数组的序列化技术的实际应用,提高C++程序开发能力。

#include <iostream>
#include <fstream>
#include <vector>

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/vector.hpp>

void array_save(std::string path,int *my_array,int count)
{
  std::ofstream ptr(path);
  boost::archive::text_oarchive archive(ptr);

  std::vector<int> vect(my_array, my_array + count);
  archive & BOOST_SERIALIZATION_NVP(vect);
}

void array_load(std::string path)
{
  std::ifstream ptr(path);
  boost::archive::text_iarchive iarchive(ptr);

  std::vector<int> vect;
  iarchive >> BOOST_SERIALIZATION_NVP(vect);

  std::ostream_iterator<int> object(std::cout, " ");
  std::copy(vect.begin(), vect.end(), object);
}

int main(int argc, char * argv[])
{
  int my_array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

  array_save("c://array_save.txt", my_array, 10);
  array_load("c://array_save.txt");

  system("pause");
  return 0;
}

4.3 针对结构体的序列化

针对结构体的序列化是一种将结构体数据类型进行持久化和传输的序列化技术,它可以将结构体中的数据转化为二进制流,使得其可以被传输和存储。在实际开发中,我们经常需要进行结构体的序列化操作,以便在需要时可以恢复出该结构体的数据。Boost库中提供了一组非常方便的序列化工具,可以轻松地将结构体从内存中打包创建成字符串,反序列化则是反之。

在本节中,我们将重点介绍Boost库中针对结构体的序列化相关概念和用法,包括如何使用Boost.Serialization进行结构体序列化和反序列化操作、如何定义自定义结构体序列化函数、如何处理结构体中的指针等。通过本节的学习,读者可掌握Boost库中针对结构体的序列化技术的实际应用,提高C++程序开发能力。

#include <iostream>
#include <fstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

typedef struct MyDate
{
  unsigned int m_day;
  unsigned int m_month;
  unsigned int m_year;

  MyDate(int d, int m, int y)
  {
    m_day = d;
    m_month = m;
    m_year = y;
  }
  MyDate()
  {
    m_day = 0;
    m_month = 0;
    m_year = 0;
  }

  template<typename Archive>
  void serialize(Archive& archive, const unsigned int version)
  {
    archive & BOOST_SERIALIZATION_NVP(m_day);
    archive & BOOST_SERIALIZATION_NVP(m_month);
    archive & BOOST_SERIALIZATION_NVP(m_year);
  }
}MyDate;

void struct_save(std::string path,MyDate *ptr)
{
  std::ofstream file(path);
  boost::archive::text_oarchive oa(file);
  // MyDate d(15, 8, 1947);
  oa & BOOST_SERIALIZATION_NVP(*ptr);
}

MyDate struct_load(std::string path)
{
  MyDate ref;
  std::ifstream file(path);
  boost::archive::text_iarchive ia(file);
  
  ia >> BOOST_SERIALIZATION_NVP(ref);
  return ref;
}

int main(int argc, char * argv[])
{
  // 序列化
  MyDate save_data(12, 7, 1997);
  struct_save("c://archive.txt", &save_data);

  // 反序列化
  MyDate load_data;
  load_data = struct_load("c://archive.txt");
  std::cout << "反序列化: " << load_data.m_day << std::endl;

  system("pause");
  return 0;
}

4.4 嵌套结构体的序列化

嵌套结构体的序列化是一种将复杂数据类型进行持久化和传输的序列化技术,它不仅可以序列化单一的结构体,还可以将多个结构体嵌套在一起进行序列化。在实际开发中,我们经常需要进行嵌套结构体的序列化操作,以便在需要时可以恢复出该结构体的数据。

在本节中,我们将重点介绍Boost库中针对嵌套结构体的序列化相关概念和用法,包括如何使用Boost.Serialization进行嵌套结构体序列化和反序列化操作、如何定义自定义嵌套结构体序列化函数、如何处理结构体中的指针等。通过本节的学习,读者可掌握Boost库中针对嵌套结构体的序列化技术的实际应用,提高C++程序开发能力。

#include <iostream>
#include <fstream>
#include <vector>
#include <boost/serialization/vector.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

using namespace std;

struct User
{
  string name;
  string email;
  int age;
  friend class boost::serialization::access;
  
  template<class Archive>
  void serialize(Archive &ar, const unsigned version)
  {
    ar & name & email & age;
  }
};

struct Group
{
  string gid;
  User leader;
  vector<User> members;
  friend class boost::serialization::access;
  
  template<class Archive>
  void serialize(Archive &ar, const unsigned version)
  {
    ar & gid & leader & members;
  }
};

ostream& operator<<(ostream& os, const User& user)
{
  return os << user.name << ", " << user.email << ", " << user.age << endl;
}

int main(int argc, char * argv[])
{
  User user1 = { "admin", "admin@email.com", 40 };
  User user2 = { "guest", "guest@email.com", 30 };
  User user3 = { "lyshark", "lyshark@email.com", 42 };
  User user4 = { "root", "root@email.com", 37 };
  
  Group group;
  group.gid = "10001";
  group.leader = user1;
  group.members.push_back(user2);
  group.members.push_back(user3);
  group.members.push_back(user4);

  // 序列化到文件
  ofstream fout("c://save.txt");
  boost::archive::text_oarchive oa(fout);
  oa << group;
  fout.close();

  // 反序列化
  Group group_load;
  ifstream fin("c://save.txt");
  boost::archive::text_iarchive ia(fin);
  ia >> group_load;

  cout << group_load.leader;
  copy(group_load.members.begin(), group_load.members.end(), ostream_iterator<User>(cout));

  system("pause");
  return 0;
}

4.5 针对类的序列化

针对类的序列化是一种将类数据类型进行持久化和传输的序列化技术,它可以将类中的数据转化为二进制流,使得其可以被传输和存储。

在实际开发中,我们经常需要进行类的序列化操作,以便在需要时可以恢复出该类的数据。Boost库中提供了一组非常方便的序列化工具,可以轻松地将类从内存中打包创建成字符串,反序列化则是反之。

#include <iostream>
#include <fstream>
#include <boost/serialization/vector.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

using namespace std;

class User
{
public:
  User()
  {
    name = "";
    email = "";
    age = 0;
  }

  User(const string& _name, const string& _email, const int & _age)
  {
    name = _name;
    email = _email;
    age = _age;
  }

  string getName() const
  {
    return name;
  }
  string getEmail() const
  {
    return email;
  }
  int getAge() const
  {
    return age;
  }

private:
  string name;
  string email;
  int age;

  friend class boost::serialization::access;
  
  template<class Archive>
  void serialize(Archive &archive, const unsigned version)
  {
    archive & name & email & age;
  }
};

int main(int argc, char * argv[])
{
  User ptr[3] =
  {
    User("admin", "admin@lyshark.com", 22),
    User("guest", "guest@lyshark.com", 24),
    User("lyshark", "lyshark@lyshark.com", 44)
  };

  // 序列化到文件
  ofstream file("c://save.txt");
  boost::archive::text_oarchive oa(file);
  oa << ptr;
  file.close();

  // 反序列化加载到类中
  User buf[3];
  ifstream file_in("c://save.txt");
  boost::archive::text_iarchive ia(file_in);

  ia >> buf;
  cout << "姓名1: "<< buf[0].getName() << ","  << "姓名2: " << buf[1].getName() << endl;
  system("pause");
  return 0;
}

4.6 序列化文本到字符串

将序列化文本转换成字符串是序列化和反序列化过程中的一项常见需求,可以用于网络传输、文件存储等场景。Boost库中提供了一组非常方便的序列化工具,可以将序列化文本打包成字符串,反序列化则是反之。

在本节中,我们将重点介绍如何将序列化文本转换为字符串,包括如何将二进制流进行编码、如何进行限长编码以及如何使用Boost.Serialization中的相关类进行编码操作等。此外,还会介绍如何进行序列化和反序列化过程中的错误处理。通过本节的学习,读者可掌握Boost库中序列化文本到字符串的技术实现,提高C++程序开发能力。

#include <iostream>
#include <sstream>

#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>

std::string binary_save(std::string save_string)
{
  std::ostringstream os;

  boost::archive::binary_oarchive archive(os);

  archive << save_string;

  std::string content = os.str();
  return content;
}

std::string binary_load(std::string load_string)
{
  std::istringstream is(load_string);
  boost::archive::binary_iarchive archive(is);
  
  std::string item;
  archive >> item;

  return item;
}

int main(int argc, char * argv[])
{

  // 将字符串序列化,并存入get变量
  std::string get = binary_save(std::string("hello lyshark"));
  std::cout << "序列化后: " << get << std::endl;

  std::string load = binary_load(get);
  std::cout << "反序列化: " << load << std::endl;

  system("pause");
  return 0;
}

4.7 序列化数组到字符串

将序列化的数组数据转换成字符串是序列化和反序列化过程中的一项常见需求,可以用于网络传输、文件存储等场景。Boost库中提供了一组非常方便的序列化工具,可以将序列化的数组数据打包成字符串,反序列化则是反之。

在本节中,我们将重点介绍如何将序列化的数组转换为字符串,包括如何将二进制流进行编码、如何进行限长编码以及如何使用Boost.Serialization中的相关类进行编码操作等。此外,还会介绍如何进行序列化和反序列化过程中的错误处理。通过本节的学习,读者可掌握Boost库中序列化数组到字符串的技术实现,提高C++程序开发能力。

#include <iostream>
#include <sstream>
#include <vector>

#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/vector.hpp>

std::string array_save(int *my_array, int count)
{
  std::ostringstream os;

  boost::archive::binary_oarchive archive(os);

  std::vector<int> vect(my_array, my_array + count);
  archive & BOOST_SERIALIZATION_NVP(vect);

  std::string content = os.str();
  return content;
}

std::vector<int> array_load(std::string load_string)
{
  std::istringstream is(load_string);
  boost::archive::binary_iarchive archive(is);

  std::vector<int> vect;
  archive >> BOOST_SERIALIZATION_NVP(vect);
  return vect;
}

int main(int argc, char * argv[])
{
  int my_array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

  std::string str = array_save(my_array, 10);

  std::cout << "序列化后: " << str << std::endl;

  std::vector<int> vect = array_load(str);

  for (int x = 0; x < 10; x++)
  {
    std::cout << "反序列化输出: " << vect[x] << std::endl;
  }

  system("pause");
  return 0;
}

4.8 序列化结构体到字符串

将序列化的结构体数据转换成字符串是序列化和反序列化过程中的一项常见需求,可以用于网络传输、文件存储等场景。Boost库中提供了一组非常方便的序列化工具,可以将序列化的结构体数据打包成字符串,反序列化则是反之。在本节中,我们将重点介绍如何将序列化的结构体数据转换为字符串,包括如何将二进制流进行编码、如何进行限长编码、基于文本的序列化操作以及如何使用Boost.Serialization中的相关类进行编码操作等。

此外,还会介绍如何进行序列化和反序列化过程中的错误处理。通过本节的学习,读者可掌握Boost库中序列化结构体到字符串的技术实现,提高C++程序开发能力。

#include <iostream>
#include <sstream>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>

typedef struct MyDate
{
  unsigned int m_day;
  unsigned int m_month;
  unsigned int m_year;

  MyDate(int d, int m, int y)
  {
    m_day = d;
    m_month = m;
    m_year = y;
  }
  MyDate()
  {
    m_day = 0;
    m_month = 0;
    m_year = 0;
  }

  template<typename Archive>
  void serialize(Archive& archive, const unsigned int version)
  {
    archive & BOOST_SERIALIZATION_NVP(m_day);
    archive & BOOST_SERIALIZATION_NVP(m_month);
    archive & BOOST_SERIALIZATION_NVP(m_year);
  }
}MyDate;

std::string struct_save(MyDate *ptr)
{
  std::ostringstream os;
  boost::archive::binary_oarchive archive(os);
  archive & BOOST_SERIALIZATION_NVP(*ptr);

  std::string content = os.str();
  return content;
}

MyDate struct_load(std::string load_string)
{
  MyDate item;
  std::istringstream is(load_string);
  boost::archive::binary_iarchive archive(is);

  archive >> item;
  return item;
}

int main(int argc, char * argv[])
{
  // 序列化
  MyDate save_data(12, 7, 1997);
  std::string save_string = struct_save(&save_data);
  std::cout << "序列化后: " << save_string << std::endl;

  // 反序列化
  MyDate ptr;
  ptr = struct_load(save_string);
  std::cout << "反序列化: " << ptr.m_year << std::endl;

  system("pause");
  return 0;
}

4.9 序列化嵌套结构到字符串

将嵌套结构序列化数据转换成字符串是序列化和反序列化过程中的一项常见需求,可以用于网络传输、文件存储等场景。Boost库中提供了一组非常方便的序列化工具,可以将序列化的嵌套结构数据打包成字符串,反序列化则是反之。

在本节中,我们将重点介绍如何将序列化的嵌套结构数据转换为字符串,包括如何将二进制流进行编码、如何进行限长编码、基于文本的序列化操作以及如何使用Boost.Serialization中的相关类进行编码操作等。此外,还会介绍如何进行序列化和反序列化过程中的错误处理。通过本节的学习,读者可掌握Boost库中序列化嵌套结构到字符串的技术实现,提高C++程序开发能力。

#include <iostream>
#include <sstream>
#include <vector>
#include <boost/serialization/vector.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>

using namespace std;

struct User
{
  string name;
  string email;
  int age;
  friend class boost::serialization::access;

  template<class Archive>
  void serialize(Archive &ar, const unsigned version)
  {
    ar & name & email & age;
  }
};

struct Group
{
  string gid;
  User leader;
  vector<User> members;
  friend class boost::serialization::access;

  template<class Archive>
  void serialize(Archive &ar, const unsigned version)
  {
    ar & gid & leader & members;
  }
};

// 序列化
std::string struct_save(Group *ptr)
{
  std::ostringstream os;
  boost::archive::binary_oarchive archive(os);
  archive & BOOST_SERIALIZATION_NVP(*ptr);

  std::string content = os.str();
  return content;
}

// 反序列化
Group struct_load(std::string load_string)
{
  Group item;
  std::istringstream is(load_string);
  boost::archive::binary_iarchive archive(is);

  archive >> item;
  return item;
}

int main(int argc, char * argv[])
{
  User user1 = { "admin", "admin@email.com", 40 };
  User user2 = { "guest", "guest@email.com", 30 };
  User user3 = { "lyshark", "lyshark@email.com", 42 };
  User user4 = { "root", "root@email.com", 37 };

  Group group;
  group.gid = "10001";
  group.leader = user1;
  group.members.push_back(user2);
  group.members.push_back(user3);
  group.members.push_back(user4);

  // 序列化
  std::string save = struct_save(&group);
  std::cout << "序列化后: " << save << std::endl;

  // 反序列化
  Group load;

  load = struct_load(save);
  std::cout << "UUID: " << load.gid << std::endl;
  std::cout << "Uname: " << load.members[0].name << std::endl;
  std::cout << "Uname2: " << load.members[1].name << std::endl;

  system("pause");
  return 0;
}

4.10 序列化类到字符串

在本节中,我们将重点介绍如何将序列化的类数据转换为字符串,包括如何将二进制流进行编码、如何进行限长编码、基于文本的序列化操作以及如何使用Boost.Serialization中的相关类进行编码操作等。此外,还会介绍如何进行序列化和反序列化过程中的错误处理。

#include <iostream>
#include <sstream>
#include <boost/serialization/vector.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>

using namespace std;

class User
{
public:
  User()
  {
    name = "";
    email = "";
    age = 0;
  }

  User(const string& _name, const string& _email, const int & _age)
  {
    name = _name;
    email = _email;
    age = _age;
  }

  string getName() const
  {
    return name;
  }
  string getEmail() const
  {
    return email;
  }
  int getAge() const
  {
    return age;
  }

private:
  string name;
  string email;
  int age;

  friend class boost::serialization::access;
  
  template<class Archive>
  void serialize(Archive &archive, const unsigned version)
  {
    archive & name & email & age;
  }
};

int main(int argc, char * argv[])
{
  User ptr[3] =
  {
    User("admin", "admin@lyshark.com", 22),
    User("guest", "guest@lyshark.com", 24),
    User("lyshark", "lyshark@lyshark.com", 44)
  };

  // 序列化数据
  std::ostringstream os;
  boost::archive::binary_oarchive archive_save(os);
  archive_save & BOOST_SERIALIZATION_NVP(ptr);

  std::string content = os.str();
  std::cout << content << std::endl;

  // 返序列化
  User item[3];

  std::istringstream is(content);
  boost::archive::binary_iarchive archive_load(is);

  archive_load >> item;

  cout << "姓名1: " << item[0].getName() << "," << "姓名2: " << item[1].getName() << endl;

  system("pause");
  return 0;
}

4.11 序列化派生类到字符串

将序列化的派生类数据转换成字符串是序列化和反序列化过程中的一项常见需求,在本节中,我们将重点介绍如何将序列化的派生类数据转换为字符串,包括如何将二进制流进行编码、如何进行限长编码、基于文本的序列化操作以及如何使用Boost.Serialization中的相关类进行编码操作等。文章来源地址https://www.toymoban.com/news/detail-661503.html

#include <iostream>
#include <sstream>
#include <vector>
#include <boost/serialization/vector.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>

using namespace std;

struct User
{
  string name;
  string email;
  int age;
  friend class boost::serialization::access;
  
  template<class Archive>
  void serialize(Archive &ar, const unsigned version)
  {
    ar & name & email & age;
  }
};

struct Group :public User
{
  int level;
  friend class boost::serialization::access;
  
  template<class Archive>
  void serialize(Archive &archive, const unsigned version)
  {
    // 将父类序列化,不管父类有多少个成员
    archive & boost::serialization::base_object<User>(*this);
    archive & level;
  }
};

// 序列化
std::string struct_save(Group *ptr)
{
  std::ostringstream os;
  boost::archive::binary_oarchive archive(os);
  archive & BOOST_SERIALIZATION_NVP(*ptr);

  std::string content = os.str();
  return content;
}

// 反序列化
Group struct_load(std::string load_string)
{
  Group item;
  std::istringstream is(load_string);
  boost::archive::binary_iarchive archive(is);

  archive >> item;
  return item;
}

int main(int argc, char * argv[])
{
  Group group_ptr;

  group_ptr.name = "lyshark";
  group_ptr.age = 24;
  group_ptr.email = "me@lyshark.com";
  group_ptr.level = 1024;

  // 序列化到字符串
  std::string save = struct_save(&group_ptr);
  std::cout << "序列化后: " << save << std::endl;

  // 反序列化到字符串
  Group load;
  load = struct_load(save);
  std::cout << "名字: " << load.name << "序号: " << load.level << std::endl;

  system("pause");
  return 0;
}

到了这里,关于4.4 C++ Boost 数据集序列化库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • cJSON(C语言JSON)库(适用于嵌入式序列化和反序列化)

    JSON与序列化和反序列化 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它以易于阅读和编写的文本形式表示结构化数据。JSON 格式广泛用于将数据从一个应用程序传输到另一个应用程序,特别是在Web应用程序中,因为它与JavaScript兼容,容易在客户端和服务器之间进

    2024年02月04日
    浏览(34)
  • 自然语言处理从入门到应用——LangChain:链(Chains)-[通用功能:链的保存(序列化)与加载(反序列化)]

    分类目录:《大模型从入门到应用》总目录 LangChain系列文章: 基础知识 快速入门 安装与环境配置 链(Chains)、代理(Agent:)和记忆(Memory) 快速开发聊天模型 模型(Models) 基础知识 大型语言模型(LLMs) 基础知识 LLM的异步API、自定义LLM包装器、虚假LLM和人类输入LLM(

    2024年02月11日
    浏览(43)
  • 解决一个JSON反序列化问题-空字符串变为空集合

    当我后端实体中定义如下: 如果前端传projectTypeId 是 null 或者 [] 都是没问题的。当前端传\\\"\\\" 则会报错。 报错如下: 意思是无法将空字符串强转为集合 前端把“” 变为null或者[]即可 (但是我所在这个项目,原先定义的是 private String projectTypeId; 前端传\\\"\\\" 也没毛病,但是后期更

    2024年01月25日
    浏览(49)
  • 网络数据通信—ProtoBuf实现序列化和反序列化

    目录 前言 1.环境搭建 2. centos下编写的注意事项 3.约定双端交互接口 4.约定双端交互req/resp 5. 客户端代码实现 6.服务端代码实现 Protobuf还常用于通讯协议、服务端数据交换场景。那么在这个示例中,我们将实现一个网络版本的通讯录,模拟实现客户端与服务端的交互,通过P

    2024年02月04日
    浏览(43)
  • Flink 数据序列化

    大家都知道现在大数据生态非常火,大多数技术组件都是运行在 JVM 上的, Flink 也是运行在 JVM 上,基于 JVM 的数据分析引擎都需要将大量的数据存储在内存中,这就不得不面临 JVM 的一些问题,比如 Java 对象存储密度较低等。针对这些问题,最常用的方法就是实现一个显式的

    2024年02月04日
    浏览(76)
  • 【数据结构】二叉树篇|超清晰图解和详解:二叉树的序列化和反序列化

    博主简介: 努力学习的22级计算机科学与技术本科生一枚🌸 博主主页: @是瑶瑶子啦 每日一言🌼: 你不能要求一片海洋,没有风暴,那不是海洋,是泥塘——毕淑敏 🍊 序列化 :本质就是 二叉树的遍历 ,就那么几个:前序、中序、后序、层序。而序列化只不过就是 在遍历到

    2024年02月10日
    浏览(49)
  • 安卓数据存储补充:XML序列化

    序列化是将对象状态转换为可保存或传输的格式的过程。我们可以把对象序列化为不同的格式,比如说:JSon序列化、XML序列化、二进制序列化等等,不同的形式适应不同的业务需求。 把对象的成员变量转化为XML格式,需要使用Xml序列化器(XmlSerializer类),序列化之后的对象

    2024年02月10日
    浏览(83)
  • 数据序列化工具Protobuf编码&避坑指南

    先简单介绍一下 Protocol Buffers(protobuf),它是 Google 开发的一种数据序列化协议(与 XML、JSON 类似)。它具有很多优点,但也有一些需要注意的缺点: 优点: 效率高 :Protobuf 以二进制格式存储数据,比如 XML 和 JSON 等文本格式更紧凑,也更快。序列化和反序列化的速度也很

    2024年02月13日
    浏览(42)
  • spark 数据序列化和内存调优(翻译)

    由于大多数Spark计算的内存性质,Spark程序可能会被集群中的任何资源瓶颈:CPU、网络带宽或内存。大多数情况下,如果数据能放在内存,瓶颈是网络带宽,但有时,您还需要进行一些调整,例如以序列化形式存储RDD,以减少内存使用。本指南将涵盖两个主要主题:数据序列化

    2024年03月11日
    浏览(50)
  • python序列化和结构化数据详解

    序列化和结构化数据是计算机程序中非常重要的概念,它们的原理和应用在许多应用程序中都是必不可少的。Python作为一种高级编程语言,在序列化和结构化数据方面提供了很多优秀的解决方案。在本文中,我们将详细介绍Python中序列化和结构化数据的相关概念和应用。 1.

    2024年02月08日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包