여기 배경은 클라이언트의 javascript에 연결하기 위해 부두 웹 소켓 서버를 사용하고 있습니다. 서버에는 ByteBuffer
을 보낼 수있는 소켓 끝 점이 있습니다.ByteBuffer.wrap (buffer.array())의 부작용
이상한 점은 배열 bytes[]
을 작성하고 ByteBuffer.wrap(byteArray)
을 보내면 작동한다는 것입니다.
ByteBuffer.allocate
및 buffer.put(..)
을 사용하여 ByteBuffer
을 빌드 한 다음 동일한 방식으로 보내면 클라이언트는 길이가 0 인 메시지를 수신합니다.
키커는 내가 바이트 버퍼를 만들고 전송하기 전에 ByteBuffer.wrap(buffer.array())
을 보내면 모든 것이 완벽하게 작동한다는 것입니다!
그래서 jetty websocket 서버에서 무슨 일이 일어나든지 상관없이, 바이트를 랩핑 해제하고 랩핑 할 때 부작용이 있음을 분명히 알 수 있습니다. I 생각은입니다. 모두 같은 데이터를 메모리에 두었 기 때문에 나는 그렇지 않습니다. 생각하면 비용이 많이 들지만, 느낌이 suuuper hacky이고, 여기에 무슨 일이 일어나고 있는지 알고 싶습니다. !
감사합니다.
편집 : FWIW, endianness-both endiannesses (?)는 ByteBuffer.wrap(buffer.array())
과 작동하며 다른 방법으로는 작동하지 않습니다.
버퍼를 보내기 전에 버퍼를 '넘기는'또는 '되감기'합니까? – Alex
나는 없었다. 고맙습니다! (질문을 답안으로 다시 말하면 받아 들일 것입니다.) – Nick