なんか難しく考えすぎな気が…

>while((ch = di.read()) != -1){

じゃなくて、バイト列に読み込んで、それを変換する

byte[] b = new byte[size];
for (int off = 0; off < size;) {
int r = di.read(b, off, b.length - off);
if (r == -1) break;
off += r;
}
String nStr = new String(b,"SJIS");