package plan9.lib;import java.nio.ByteBuffer;import java.nio.channels.ReadableByteChannel;import java.nio.channels.ByteChannel;import java.io.IOException;// from styx-n-9p.googlecode.com (MIT licence)public class Misc { public static final String dump(byte[] b, int i, int e, int max){ if(max < 0) max = 64; if(e > b.length) e = b.length; StringBuilder bs = new StringBuilder(max); int n = 0; for(; i < e && ++n <= max; i++) bs.append(String.format("%02x", (int)b[i] & 0xFF)); return bs.toString(); } public static final String dump(byte[] b, int i, int e){ return dump(b, i, e, -1); } public static final String dump(byte[] b, int max){ return dump(b, 0, b.length, max); } public static final String dump(byte[] b){ return dump(b, 0, b.length, b.length); } public static final String dump(ByteBuffer b){ StringBuilder bs = new StringBuilder(128); bs.append("buffer "+b.toString()+": "); int p = b.position(); int n = 0; for(int i = p; i < b.limit() && ++n < 64; i++) bs.append(String.format("%02x", (int)b.get(i) & 0xFF)); b.position(p); return bs.toString(); } // read exactly a given number of bytes, returning a new buffer, or null on end-of-file public static final byte[] readn(ReadableByteChannel fd, int nb) throws IOException { byte[] buf = new byte[nb]; for(int n = 0; n < nb;){ int m = fd.read(ByteBuffer.wrap(buf, n, nb-n)); if(m <= 0) return null; n += m; } return buf; } // read exactly a given number of bytes into an existing buffer at a given offset, returning the buffer, or null on end-of-file public static final byte[] readn(ReadableByteChannel fd, byte[] buf, int offset, int nb) throws IOException { for(int n = 0; n < nb;){ int m = fd.read(ByteBuffer.wrap(buf, offset+n, nb-n)); if(m <= 0) return null; n += m; } return buf; } // read exactly a given number of bytes into an existing buffer, returning the buffer, or null on end-of-file public static final byte[] readn(ReadableByteChannel fd, byte[] buf, int nb) throws IOException { return readn(fd, buf, 0, nb); } // give a Thread a better name than the JVM manages public static void nominate(Thread t){ t.setName(String.format("%s id#%d", t.getClass().getName(), t.getId())); } // ensure an fd is closed, never mind what happens: we're done with it public static void qclose(ByteChannel fd){ if(fd != null){ try{ fd.close(); }catch(Exception e){ // we don't care, as long as it's gone } } }}
package plan9.lib;
import java.nio.ByteBuffer;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.ByteChannel;
import java.io.IOException;
// from styx-n-9p.googlecode.com (MIT licence)
public class Misc {
public static final String dump(byte[] b, int i, int e, int max){
if(max < 0)
max = 64;
if(e > b.length)
e = b.length;
StringBuilder bs = new StringBuilder(max);
int n = 0;
for(; i < e && ++n <= max; i++)
bs.append(String.format("%02x", (int)b[i] & 0xFF));
return bs.toString();
}
public static final String dump(byte[] b, int i, int e){
return dump(b, i, e, -1);
}
public static final String dump(byte[] b, int max){
return dump(b, 0, b.length, max);
}
public static final String dump(byte[] b){
return dump(b, 0, b.length, b.length);
}
public static final String dump(ByteBuffer b){
StringBuilder bs = new StringBuilder(128);
bs.append("buffer "+b.toString()+": ");
int p = b.position();
int n = 0;
for(int i = p; i < b.limit() && ++n < 64; i++)
bs.append(String.format("%02x", (int)b.get(i) & 0xFF));
b.position(p);
return bs.toString();
}
// read exactly a given number of bytes, returning a new buffer, or null on end-of-file
public static final byte[] readn(ReadableByteChannel fd, int nb) throws IOException {
byte[] buf = new byte[nb];
for(int n = 0; n < nb;){
int m = fd.read(ByteBuffer.wrap(buf, n, nb-n));
if(m <= 0)
return null;
n += m;
}
return buf;
}
// read exactly a given number of bytes into an existing buffer at a given offset, returning the buffer, or null on end-of-file
public static final byte[] readn(ReadableByteChannel fd, byte[] buf, int offset, int nb) throws IOException {
for(int n = 0; n < nb;){
int m = fd.read(ByteBuffer.wrap(buf, offset+n, nb-n));
if(m <= 0)
return null;
n += m;
}
return buf;
}
// read exactly a given number of bytes into an existing buffer, returning the buffer, or null on end-of-file
public static final byte[] readn(ReadableByteChannel fd, byte[] buf, int nb) throws IOException {
return readn(fd, buf, 0, nb);
}
// give a Thread a better name than the JVM manages
public static void nominate(Thread t){
t.setName(String.format("%s id#%d", t.getClass().getName(), t.getId()));
}
// ensure an fd is closed, never mind what happens: we're done with it
public static void qclose(ByteChannel fd){
if(fd != null){
try{
fd.close();
}catch(Exception e){
// we don't care, as long as it's gone
}
}
}
}