레퍼런스

ByteWriter, ByteReader, Json, IJsonSerializable의 전체 멤버.

업데이트 2026-09-11

모두 Udonite.Serialization에 있습니다.

ByteWriter

new ByteWriter()             // 기본 초기 용량
new ByteWriter(64)           // 바이트 단위 초기 용량, 필요하면 이를 넘어 자란다
멤버 쓰는 것
WriteByte(byte) 1바이트
WriteBoolean(bool), WriteChar(char) 고정 길이
WriteInt16, WriteUInt16, WriteInt32, WriteUInt32, WriteSingle, WriteDouble 고정 길이, System.BitConverter 사용
WriteString(string) 길이 접두(null0), 한 글자씩
WriteBytes(byte[]) 길이 접두가 붙은 원시 바이트 — 중첩 페이로드가 지나가는 이음매
WriteVector2, WriteVector3, WriteQuaternion 성분별로
WriteLength(int) 필요한 최소 바이트 수로 표현한 개수 — 127까지 1바이트, 16383까지 2바이트
Position { get; } 지금까지 쓴 바이트 수
Reset() 새 버퍼를 할당하지 않고 빈 상태로 되감기
ToArray() 딱 맞는 크기의 복사본 — 초과 할당된 꼬리는 포함되지 않는다

모든 Write 메서드는 this를 반환하므로 체이닝됩니다: new ByteWriter().WriteInt32(1).WriteString("a").

의도적으로 좁힌 핵심이며, System.BitConverter를 그대로 옮긴 게 아닙니다. 64비트 정수도, 부호 있는 8비트도, short보다 좁은 16비트도, Vector2Int도 없습니다. reached 클래스는 통째로 컴파일되고, 선언한 메서드마다 프로그램이 살아있는 동안 계속 힙을 잡아먹으니, 여기 있는 건 페이로드가 실제로 실어 나를 법한 것들뿐입니다.

ByteReader

new ByteReader(bytes)
멤버 읽는 것
ReadByte() 1바이트
ReadBoolean(), ReadChar() 고정 길이
ReadInt16, ReadUInt16, ReadInt32, ReadUInt32, ReadSingle, ReadDouble 고정 길이
ReadString() WriteString 페이로드를 되읽는다
ReadBytes() WriteBytes 페이로드를 되읽는다
ReadVector2, ReadVector3, ReadQuaternion 성분별로
ReadLength() WriteLength 개수를 되읽는다
Position { get; }, Length { get; }, LengthRemaining { get; } 커서 위치, 버퍼 크기, 남은 바이트
SetBuffer(byte[]) 다른 버퍼로 이 리더를 재사용, 커서는 처음으로

끝을 넘어서 읽으면 예외 대신 로그를 남기고 해당 타입의 기본값을 반환합니다. Udonite에서 예외 처리는 아직 검증되지 않았고, 손상되거나 잘린 버퍼가 읽는 쪽 behaviour를 함께 끌고 내려가서는 안 됩니다. 쓴 것과 같은 순서로, 쓴 것 전부를 읽으세요. 형태가 틀렸다는 걸 알려주는 건 여기 없고, 읽기가 바이트 부족으로 멈췄다는 것만 알 수 있습니다.

Json

멤버 하는 일
Serialize<T>(T) 자신의 ToJson()을 통해 T를 JSON으로 담는다. T가 null이거나 VRCJson이 거부하면 null
Deserialize<T>(string) JSON을 파싱해 새 T를 만들고(where T : class, IJsonSerializable, new()), FromJson을 통해 채운다. JSON이 잘못됐으면 null
Serialize(DataToken), Serialize(DataToken, bool pretty) 정해진 타입 없이 즉석에서 만드는 JSON을 위한 저수준 형태
Deserialize(string) DataToken?을 그대로 반환한다, 같은 탈출구의 반대 방향

실패하면 일관되게 null, boolout 매개변수 조합이 아닙니다.

임의 타입의 필드를 훑는 리플렉션 기반 Serialize<T>는 없습니다. Udon에는 리플렉션이 전혀 없습니다 — 추측이 아니라 컴파일러에 직접 확인한 사실입니다. Deserialize<T>where T : new()도 리플렉션이 아닙니다. C# 컴파일러가 호출 지점에서 해결하는 제약이라, 여기서 Activator.CreateInstance를 호출할 수 없어도 이건 동작합니다.

JSON 숫자는 정수로 적었어도 모두 TokenType.Double로 파싱됩니다. {"score": 42}.Int가 예외를 던지는 토큰으로 파싱됩니다 — 읽을 수 있는 건 .Double(필요한 타입으로 캐스팅)뿐입니다. 이건 VRCJson 자체의 특성이고, 이 래퍼가 바꿀 수 있는 게 아닙니다.

IJsonSerializable

멤버 하는 일
DataToken ToJson() 이 인스턴스를 담는다, 보통 DataDictionary
void FromJson(DataToken token) ToJson이 만든 것으로부터 이 인스턴스를 채운다

어느 메서드도 언급하지 않은 필드는 전송되지도, 채워지지도 않습니다 — 타입의 멤버를 자동으로 조사하는 장치는 여기 없습니다. FromJson은 새 인스턴스를 반환하는 대신 호출된 인스턴스 자체를 바꿉니다. Udonite Net의 NetworkEvent.Deserialize와 같은 방식입니다. new()가 있거나 이미 인스턴스를 만들어 둔 호출자가 있거나, 둘 중 하나 없이는 여기서 임의 타입을 만들어낼 방법이 없습니다.

문제가 발생했습니다 새로 고침