Java中的ShortBuffer和矩阵

时间:2011-12-04 09:39:26

标签: java file buffer

我遇到ShortBuffer问题。这是我的代码:

FileChannel fc = new FileInputStream("C:/Dane DMS/"+names2).getChannel();
ByteBuffer bb = ByteBuffer.allocateDirect((int) fc.size());
while (bb.remaining() > 0) fc.read(bb);
fc.close();
bb.flip();
// choose the right endianness
ShortBuffer sb = bb.order(ByteOrder.BIG_ENDIAN).asShortBuffer();

在这个文件中我有一个矩阵。

111 222 333 123
444 555 666 456
777 888 999 789
098 765 432 321

我需要将此矩阵更改为:

098 765 432 321
777 888 999 789
444 555 666 456
111 222 333 123

我必须更改此矩阵或创建将从数字098开始并以数字123结束的循环。

我没有打印这个矩阵。我正在使用:

for(int i = 0; i<=1200; i++)
                   {
                       for(int j = 0; j<=1200 ; j++)
                       {

                       }

                   }

交叉矩阵但是这样我从数字111开始,我需要从098开始到123结束。

2 个答案:

答案 0 :(得分:1)

你可以试试这个

FileChannel fc = new FileInputStream("C:/Dane DMS/"+names2).getChannel();
ByteBuffer bb = ByteBuffer.allocateDirect((int) fc.size());
while (bb.remaining() > 0) fc.read(bb);
fc.close();
bb.flip();
// choose the right endianness
ShortBuffer sb = bb.order(ByteOrder.BIG_ENDIAN).asShortBuffer();

short[][] Matrix = new short[1201][1201];
for(int i = 0; i<=1200; i++)
{
    for(int j = 0; j<=1200 ; j++)
    {
        Matrix[1200-i][j] = sb.get(i*1201+j);
    }
}

答案 1 :(得分:0)

所以你需要反转行吗?为此,您需要计算行长度。然后你可以交换第一行和最后一行,然后交换第二行和第二行等。