Skip to main content

Performance of ByteBuffers vs Arrays

1 reply [Last post]
Joined: 2006-01-06

I have the following code that was ported from C that copies ints from
one array to another. Can someone tell me whether they think
that I can gain any performance using another method. I use ByteBuffers
because the data is originaly read as bytes (RGBA) and the COPY function
rearranges the order during the copying process.

private void COPY(ByteBuffer d, ByteBuffer s, int TILE_SIZE, int I0, int J0,
int U0, int V0, int I1, int J1, int U1, int V1, int I2, int J2, int U2, int V2)
int i,j,u,v,i0,j0,u0,v0,di0,dj0,du0,dv0,di,dj,du,dv,k0,k;

IntBuffer rps = s.asIntBuffer();
IntBuffer rpd = d.asIntBuffer();
i0=I0; j0=J0; u0=U0; v0=V0;
int TS1 = TILE_SIZE-1;
di0=(I2-I0)/TS1; dj0=(J2-J0)/TS1;
du0=(U2-U0)/TS1; dv0=(V2-V0)/TS1;
di=(I1-I0)/TS1; dj=(J1-J0)/TS1;
du=(U1-U0)/TS1; dv=(V1-V0)/TS1;
for (k0=(TILE_SIZE-1);k0>=0;k0--)
i=i0; j=j0; u=u0; v=v0;
for (k=k0;k>=0;k--)
rpd.put((v>>1)*TILE_SIZE+(u>>1), rps.get(j*TILE_SIZE+i));
i+=di; j+=dj; u+=du; v+=dv;
i0+=di0; j0+=dj0; u0+=du0; v0+=dv0;

Reply viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
Joined: 2005-11-01

The way you are using ByteBuffers, array should always be faster.
I have used ByteBuffers in direct memory (C memory space) because I believe they are faster for transferring data to/from the OS.