我正在從事一個在線遊戲,並且在服務器端工作時遇到了一些小麻煩。JAVA NIO ByteBuffer分配以適應最大的數據集?
在Java中使用非阻塞套接字時,處理完整分組數據集的最佳操作過程是什麼?在所有數據都可用之前無法處理完整分組數據集?例如,通過套接字發送大的2D平鋪地圖。
我能想到的兩種方法處理:
分配字節緩衝區大到足以處理來處理從我的例子大型2D瓷磚地圖所需要的完整的數據集。繼續將讀取數據添加到緩衝區,直到全部收到並從那裏進行處理。
如果ByteBuffer的大小較小(可能是1500),則可以完成後續讀取操作並將其發送到文件,直至完全從文件中處理完畢。這將防止必須擁有大型ByteBuffers,但由於磁盤I/O而降低性能。
我爲每個SocketChannel使用專用的ByteBuffer,這樣我就可以繼續讀取數據,直到完成處理。問題是,如果我的2D平鋪地圖大小爲2MB,使用1000個2MB ByteBuffers(假設1000是客戶端連接限制並且它們都在使用中)真的很明智嗎?必須有一個我沒有想到的更好的方式。
我寧願保持簡單,但我願意接受任何建議,並感謝您的幫助。謝謝!
將Java堆大小調整爲如此大的大小是否可以接受?即使是100個連接也很容易將它的默認限制吹掉,而我的服務器會因OutOfMemory異常而崩潰。 – user126368 2009-06-26 04:04:36