首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileChannel连续编写代码问题

FileChannel连续编写代码问题
EN

Stack Overflow用户
提问于 2012-06-08 14:55:26
回答 1查看 134关注 0票数 0

我有下面的代码,在j for循环中,out.write()只写在j == 0中,那么bytesThisWritten是0。

代码语言:javascript
复制
    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;
                    }
                }

对于打印出来的内容,我知道源数据不是空的:

代码语言:javascript
复制
DataMgr write auxHeader i=0, byteWritten=4256
DataMgr write data i,j=0,0, bytesThisWritten=3584, byteWritten=7840 oneRow.size=896, oneRow[0]-0.012269974
DataMgr write data i,j=0,1, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.012150764
DataMgr write data i,j=0,2, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.0056562424
DataMgr write data i,j=0,3, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.006008148
DataMgr write data i,j=0,4, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.0064029694
DataMgr write data i,j=0,5, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.010842323
DataMgr write data i,j=0,6, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.01802063
DataMgr write data i,j=0,7, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.0023899078
DataMgr write data i,j=0,8, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.0068216324
DataMgr write data i,j=0,9, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.005973816
DataMgr write data i,j=0,10, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.012469292
DataMgr write data i,j=0,11, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.013271332
DataMgr write data i,j=0,12, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]6.542206E-4
DataMgr write data i,j=0,13, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.008749008
DataMgr write data i,j=0,14, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.012054443
DataMgr write data i,j=0,15, bytesThisWritten=0, byteWritten=7840 oneRow.size=896, oneRow[0]-0.008696556

i for循环中,它似乎工作,但只有在j循环中,它只写一次。FileChannel处于附加模式,并且在i循环中通道未关闭。我的密码有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-08 15:59:37

j循环更改为以下内容将解决此问题。FloatBuffer似乎有一些特殊的性质。

代码语言:javascript
复制
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;
                        }
                    }
                }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10951238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档