我编写了自己的类,将C#标准基元转换为字节数组.
后来,我看了一下BitConverter类源,看看专业人士是如何做到的.
我的代码示例:
public static byte[] getBytes(short value) {
byte[] bytes = new byte[2];
bytes[0] = (byte)(value >> 8);
bytes[1] = (byte)value;
return bytes;
}
Run Code Online (Sandbox Code Playgroud)
BitConverter类代码:
public unsafe static byte[] GetBytes(short value)
{
byte[] bytes = new byte[2];
fixed(byte* b = bytes)
*((short*)b) = value;
return bytes;
}
Run Code Online (Sandbox Code Playgroud)
为什么他们的功能被标记为不安全并使用固定运算符?
即使这些功能使用不安全,这些功能是否容易出错?我应该放弃我的并实施它们吗?哪个更有效率?
我正在用c#开发游戏服务器.服务器通过套接字与客户端通信,并使用自定义数据包协议发送byte [].问题是,这个软件是特定于Windows OS还是能够在linux服务器上运行.我在不同的论坛上阅读了不同的帖子,开发人员说他们的服务器只是windows os,有人说它可以在linux上运行.
有什么具体因素吗?应用程序是否必须特定编写才能在Linux上运行?
这是两个例子
将值映射为单值
private Map<Short, Boolean> _Booleans = new HashMap<Short, Boolean>(); //works
private Map<Short, boolean> _Booleans = new HashMap<Short, boolean>(); //not allowed
Run Code Online (Sandbox Code Playgroud)
将值映射为Array
private Map<Short, Boolean[]> _Booleans = new HashMap<Short, Boolean[]>(); //works
private Map<Short, boolean[]> _Booleans = new HashMap<Short, boolean[]>(); //works!
Run Code Online (Sandbox Code Playgroud)
原始包装器被强制为单值,但是允许原始数组,为什么呢?
子问题:是否可以将单值基元与Map一起使用?
假设我们有一个由两个元素组成的数组,它们是某种原始值的类型。
volatile int[] a = new int[2]{0,0};
Run Code Online (Sandbox Code Playgroud)
我有两个线程,每个线程都写入/读取其中一个元素。第一个线程仅适用于 a[0],第二个线程仅适用于 a[1]。
数组可以这样工作吗,或者数组仍然需要被锁定,即使不同的索引值受到影响?
我的解决方案需要许多常量变量,因此在进一步的开发中,我可以简单地创建新的原语或引用现有数据,而不是创建新的原语,这排除了未来开发过程中可能出现的错误。
我读过java池常量变量,当创建新数据时,它与池进行比较,如果这样的对象存在,它返回对现有对象的引用,而不是创建新的对象。
虽然池化可能听起来是最好的方法,但就我而言,我需要许多短变量,每个变量分配 2 个字节(对于原语)。但如果我创建Short我会丢失 2 个字节,因为引用将占用 4 个字节。
即使考虑到 Short 使用池化,仍然使用原语是否有意义。另外,从短到短的拆箱也需要一些资源(几乎接近于零,但仍然如此)。请注意,short 必须时常转换为原始 3 字节数组,因此另一个 + 表示原始。
public static final short USER = 10;
Run Code Online (Sandbox Code Playgroud)
代替
public static final Short USER = 10;
Run Code Online (Sandbox Code Playgroud) c# ×3
primitive ×3
java ×2
arrays ×1
bitconverter ×1
bytearray ×1
concurrency ×1
dictionary ×1
linux ×1
pool ×1
reference ×1
server ×1
value-type ×1
windows ×1
wrapper ×1