Java FileChannel连续写入代码问题

Java FileChannel连续写入代码问题,java,Java,我有下面的一段代码,在j for循环中out.write()仅写入j==0,那么ByTestHisWrite是0 boolean append = true; FileChannel out = new FileOutputStream(dirToSave + fileName, append).getChannel(); ByteBuffer dataBuffer = ByteBuffer.allocate(ScanDataStructConstants.NUM_DET

我有下面的一段代码,在j for循环中out.write()仅写入j==0,那么ByTestHisWrite是0

    boolean append = true;
    FileChannel out = new FileOutputStream(dirToSave + fileName, append).getChannel();
    ByteBuffer dataBuffer = ByteBuffer.allocate(ScanDataStructConstants.NUM_DETECTORS * 4);
                dataBuffer.order(ByteOrder.LITTLE_ENDIAN);
                FloatBuffer floatBuffer = dataBuffer.asFloatBuffer();
                long bytesThisWritten = 0;
                for(int i = 0; i < ScanDataStructConstants.NUM_VIEWS_PER_ROTATION; i++)
                {
                    if(!taskWorker.isCancelled())
                    {
                        taskWorker.setTaskProgress(i); 
                        //write auxHeader
                        AuxHeader auxHeader = auxHeaderArray.getOneAuxHeader(i);                    
                        byteWritten = byteWritten + out.write(auxHeader.getJavoAuxHeader().getCmdByteBuffer()); 
                        System.out.println("DataMgr write auxHeader i=" + i + ", byteWritten=" + byteWritten);

                        //write data                               
                        for(int j = 0; j < ScanDataStructConstants.NUM_ROWS; j++)
                        {                           
                            if(!taskWorker.isCancelled())
                            {
                                float[] oneRow = scanDataArray.getOneRowDataFromAView(i, j);                           
                                floatBuffer.rewind();
                                floatBuffer.put(oneRow);
                                bytesThisWritten = out.write(dataBuffer);
                                byteWritten = byteWritten + bytesThisWritten;
                                if(i == 0)
                                {
                                    System.out.println("DataMgr write data i,j=" + i + "," + j + 
                                            ", bytesThisWritten=" + bytesThisWritten + 
                                            ", byteWritten=" + byteWritten + 
                                            " oneRow.size=" + oneRow.length + 
                                            ", oneRow[0]" + oneRow[0]);
                                }
                            }
                            else
                            {
                                status = ReturnStatusEnum.CANCELED_FAILURE;
                                break;
                            }
                        }
                    }
                    else
                    {
                        status = ReturnStatusEnum.CANCELED_FAILURE;
                        break;
                    }
                }

i for循环中它似乎有效,但仅在j循环中它只写一次。文件通道处于附加模式,通道在i循环中未关闭。我的代码有什么问题吗?

j循环更改为以下内容将解决此问题。看起来FloatBuffer有一些特殊的属性

for(int j = 0; j < ScanDataStructConstants.NUM_ROWS; j++)
                    {                           
                        if(!taskWorker.isCancelled())
                        {
                            float[] oneRow = scanDataArray.getOneRowDataFromAView(i, j);                              
                            dataBuffer.rewind();
                            FloatBuffer floatBuffer = dataBuffer.asFloatBuffer();
                            floatBuffer.put(oneRow);
                            bytesThisWritten = out.write(dataBuffer);
                            bytesWritten = bytesWritten + bytesThisWritten;
                            if(i == 0)
                            {
                                System.out.println("DataMgr write data i,j=" + i + "," + j + 
                                        ", bytesThisWritten=" + bytesThisWritten + 
                                        ", byteWritten=" + bytesWritten + 
                                        " oneRow.size=" + oneRow.length + 
                                        ", oneRow[0]" + oneRow[0]);
                            }                               
                        }
                        else
                        {
                            status = ReturnStatusEnum.CANCELED_FAILURE;
                            break;
                        }
                    }
                }
for(int j=0;j
for(int j = 0; j < ScanDataStructConstants.NUM_ROWS; j++)
                    {                           
                        if(!taskWorker.isCancelled())
                        {
                            float[] oneRow = scanDataArray.getOneRowDataFromAView(i, j);                              
                            dataBuffer.rewind();
                            FloatBuffer floatBuffer = dataBuffer.asFloatBuffer();
                            floatBuffer.put(oneRow);
                            bytesThisWritten = out.write(dataBuffer);
                            bytesWritten = bytesWritten + bytesThisWritten;
                            if(i == 0)
                            {
                                System.out.println("DataMgr write data i,j=" + i + "," + j + 
                                        ", bytesThisWritten=" + bytesThisWritten + 
                                        ", byteWritten=" + bytesWritten + 
                                        " oneRow.size=" + oneRow.length + 
                                        ", oneRow[0]" + oneRow[0]);
                            }                               
                        }
                        else
                        {
                            status = ReturnStatusEnum.CANCELED_FAILURE;
                            break;
                        }
                    }
                }