마샬링은 종종 데이터를 저장하거나 전송할 목적으로
데이터 구조 또는 개체를 한 표현에서 다른 표현으로 변환하는 프로세스입니다.
여기에는 고수준 프로그래밍 언어 형식의 데이터를 저수준 이진 표현으로 변환하거나
한 프로그래밍 언어의 데이터 구조에서 다른 언어의 데이터 구조로 변환하는 작업이 포함될 수 있습니다.
컴퓨터 과학에서 마샬링은
일반적으로 분산 시스템, 데이터 직렬화 및 프로세스 간 통신을 비롯한 다양한 컨텍스트에서 사용됩니다.
예를 들어 분산 시스템에서 마샬링은 데이터를 네트워크를 통해 전송할 수 있는 형식으로 변환하는 데 사용되는 반면,
데이터 직렬화에서는 마샬링이 개체를 바이트 스트림으로 저장하거나 전송할 수 있는 형식으로 변환하는 데 사용됩니다. .
마샬링의 반대는 마샬링된 데이터를 원래 형식으로 다시 변환하는 프로세스인 언마샬링입니다.
이 프로세스는 일반적으로 분산 시스템에서 네트워크를 통해 전송된 데이터를 재구성하는 데 사용됩니다.
Example:
네트워크를 통해 전송하거나 파일에 저장하기 위해 이 클래스를 JSON 표현으로 변환하려고 합니다.
C#의 System.Text.Json네임스페이스를 사용하여 클래스를 JSON 개체로 마샬링할 수 있습니다.
다음은 예제 코드 스니펫입니다.
using System;
using System.Text.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Person p = new Person { Name = "Alice", Age = 30 };
string jsonString = JsonSerializer.Serialize(p);
Console.WriteLine(jsonString);
Person이 예제에서는 이름이 "Alice"이고 연령이 30인 개체를 만듭니다.
그런 다음 JsonSerializer.Serialize개체를 JSON 문자열로 직렬화하는 데 사용합니다.
그런 다음 Console.WriteLine(jsonString)를 사용하여 JSON 문자열을 콘솔에 인쇄합니다.
이 프로그램의 출력은 다음과 같습니다.
{"Name":"Alice","Age":30}
Person 객체를 나타내는 JSON 문자열입니다 .
그런 다음 이 JSON 문자열을 사용하여 네트워크를 통해 전송하거나 파일에 저장하고
JsonSerializer.Deserialize 함수를 사용하여 Person개체 로 역직렬화할 수 있습니다 .
Example2:
Struct 에서 필드의 레이아웃 및 마샬링을 지정하기 위해 LayoutKind.Sequential와 MarshalAs를 조합으로 사용할 수 있습니다 .
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
public struct Person
{
[MarshalAs(UnmanagedType.LPStr)]
public string FirstName;
[MarshalAs(UnmanagedType.LPStr)]
public string LastName;
public int Age;
}
이 코드에서는 ,
세 필드가 있는 Person 구조체를 정의합니다 .
FirstName, LastName, Age
StructLayout(LayoutKind.Sequential) 속성은 구조체의 필드가 구조체에 정의된 것과 동일한 순서로 메모리에 배치되어야 함을 나타냅니다.
또한 MarshalAs속성을 사용하여 문자열 필드 FirstName및 LastName의 마샬링을 지정합니다.
UnmanagedType.LPStr필드는 문자열을 null로 끝나는 ANSI 문자열임을 나타내도록 지시 합니다.
C++ DLL과 C# 사이에서 데이터를 주고 받을 때 이 구조를 사용하면
구조체의 레이아웃은 고정되고 예측 가능하며 문자열 필드는 null로 끝나는 ANSI 문자열로 마샬링됩니다.
이렇게 하면 양쪽에서 데이터가 올바르게 해석되고 플랫폼 또는 아키텍처 차이로 인한 문제가 발생하지 않습니다.
Marshaling is the process of transforming data structures or objects from one representation to another,
often for the purpose of storing or transmitting the data.
This can involve converting data from a high-level programming language format into a low-level binary representation,
or from one programming language's data structures to another's.
In computer science,
marshaling is commonly used in various contexts,
including distributed systems,
data serialization, and inter-process communication.
For example,
in distributed systems, marshaling is used to convert data to a format that can be transmitted over a network, while in data serialization,
marshaling is used to convert an object into a format that can be stored or transmitted as a stream of bytes.
The opposite of marshaling is unmarshaling,
which is the process of taking the marshaled data and converting it back into its original format.
This process is commonly used in distributed systems to reconstruct data that has been sent over a network.
'C#' 카테고리의 다른 글
C# System.ValueType.Equals 메서드 구현 내용 기록 (0) | 2023.02.24 |
---|---|
C# bool 타입을 byte 타입으로 변환 | Convert bool to byte | Convert byte to bool (0) | 2023.02.17 |
C# bool 형식 마샬링 할 때 주의 할 점 | C# Boolean Marshaling (0) | 2023.02.16 |
C# Marshaling Data Type (0) | 2023.02.15 |
ArgumentException: Partial byte sequence encountered in the input. (0) | 2023.02.13 |