的Java kernel32.ReadFile错误(字节缓冲区不能被转换成字节[])

问题描述:

我想读在Java中的NamedPipe用下面的代码:的Java kernel32.ReadFile错误(字节缓冲区不能被转换成字节[])

ByteBuffer buffer = ByteBuffer.allocate(4*1024); 
IntByReference bytesRead = new IntByReference(buffer.capacity()); 
int lastError = 0; 
if (kernel32.PeekNamedPipe(pipeHandle, buffer, buffer.capacity(), bytesRead, null, null)) 
     while (!(kernel32.ReadFile(pipeHandle, /*(!)ERROR HERE==>*/buffer, buffer.capacity(), bytesRead, overlapped)) || (lastError=kernel32.GetLastError()) == Kernel32.ERROR_MORE_DATA){ 
       if (lastError == Kernel32.ERROR_PIPE_NOT_CONNECTED || overlapped.Internal.intValue() != WinNT.ERROR_IO_PENDING) 
         break; 
       } 

但它失败,出现以下错误:incompatible types: ByteBuffer cannot be converted to byte[]。我试图从byte[] b = new byte[buffer.remaining()];替换bufferb但程序开始工作错误。任何想法如何纠正错误将是受欢迎的。谢谢。

问题是解决了这一点:

byte[] b = new byte[buffer.remaining()]; 

再次检查程序的返回。

谢谢大家。