Java FileChannel连续写入代码问题
我有下面的一段代码,在j for循环中out.write()仅写入j==0,那么ByTestHisWrite是0Java 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
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;
}
}
}