Compare commits
2 Commits
25605c7479
...
1dee92147d
Author | SHA1 | Date | |
---|---|---|---|
1dee92147d | |||
1c24b43762 |
21
README.md
21
README.md
@ -7,3 +7,24 @@ writen in rust!
|
|||||||
感谢 @神楽坂柚咲/伊欧/langyo
|
感谢 @神楽坂柚咲/伊欧/langyo
|
||||||
|
|
||||||
在编写过程中的帮助(
|
在编写过程中的帮助(
|
||||||
|
|
||||||
|
## 概况
|
||||||
|
|
||||||
|
- `shen-nbt1`
|
||||||
|
- 几周的技术积累
|
||||||
|
- 100 mb/s
|
||||||
|
|
||||||
|
- `shen-nbt2`
|
||||||
|
- 2个月的技术积累
|
||||||
|
- 500 mb/s
|
||||||
|
|
||||||
|
- `shen-nbt3/4`
|
||||||
|
- 半年的技术积累
|
||||||
|
- v3 有单一依赖库
|
||||||
|
- v4 无依赖库
|
||||||
|
- 2000 mb/s
|
||||||
|
|
||||||
|
- `shen-nbt5` (编写中)
|
||||||
|
- 一年左右的技术积累
|
||||||
|
- 4000 mb/s ?
|
||||||
|
- 支持 `serde` 序列化/反序列化
|
||||||
|
@ -61,15 +61,41 @@ impl NbtReader<'_> {
|
|||||||
read!(read_u64, u64, 8);
|
read!(read_u64, u64, 8);
|
||||||
read!(read_f32, f32, 4, false);
|
read!(read_f32, f32, 4, false);
|
||||||
read!(read_f64, f64, 8, false);
|
read!(read_f64, f64, 8, false);
|
||||||
pub fn read_bytes(&mut self, len: usize) -> &[u8] {
|
|
||||||
|
pub fn read_u8_array(&mut self, len: usize) -> &[u8] {
|
||||||
let value = &self.data[self.cursor..self.cursor + len];
|
let value = &self.data[self.cursor..self.cursor + len];
|
||||||
self.cursor += len;
|
self.cursor += len;
|
||||||
value
|
value
|
||||||
}
|
}
|
||||||
|
pub fn read_i8_array(&mut self, len: usize) -> &[i8] {
|
||||||
|
let value = unsafe {
|
||||||
|
std::slice::from_raw_parts(self.data[self.cursor..].as_ptr() as *const i8, len)
|
||||||
|
};
|
||||||
|
self.cursor += len;
|
||||||
|
value
|
||||||
|
}
|
||||||
|
pub fn read_string(&mut self, len: usize) -> String {
|
||||||
|
let value = String::from_utf8_lossy(&self.data[self.cursor..self.cursor + len]);
|
||||||
|
self.cursor += len;
|
||||||
|
value.into_owned()
|
||||||
|
}
|
||||||
|
pub fn read_int_array(&mut self, len: usize) -> &[i32] {
|
||||||
|
let datas = self.read_u8_array(len * 4);
|
||||||
|
let value = unsafe {
|
||||||
|
std::slice::from_raw_parts(datas.as_ptr() as *const i32, len)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
pub fn read_long_array(&mut self, len: usize) -> &[i64] {
|
||||||
|
let datas = self.read_u8_array(len * 8);
|
||||||
|
let value = unsafe {
|
||||||
|
std::slice::from_raw_parts(datas.as_ptr() as *const i64, len)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum NbtValue<'value> {
|
pub enum NbtValue {
|
||||||
// end: 0
|
// end: 0
|
||||||
/// 1: Byte
|
/// 1: Byte
|
||||||
Byte(i8),
|
Byte(i8),
|
||||||
@ -87,13 +113,15 @@ pub enum NbtValue<'value> {
|
|||||||
ByteArray(Vec<i8>),
|
ByteArray(Vec<i8>),
|
||||||
/// 8
|
/// 8
|
||||||
/// 或者叫 u8 array
|
/// 或者叫 u8 array
|
||||||
String(&'value str),
|
String(String),
|
||||||
/// 9
|
/// 9
|
||||||
List(Vec<NbtValue<'value>>),
|
List(Vec<NbtValue>),
|
||||||
/// 10
|
/// 10
|
||||||
Compound(Vec<(String, NbtValue<'value>)>),
|
Compound(Vec<(String, NbtValue)>),
|
||||||
/// 11
|
/// 11
|
||||||
IntArray(Vec<i32>),
|
IntArray(Vec<i32>),
|
||||||
/// 12
|
/// 12
|
||||||
LongArray(Vec<i64>),
|
LongArray(Vec<i64>),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user