J
jimgardener
hi
i tried using nio.charset classes for decoding contents of a text file
The textfile 'samplein.txt' has 3 lines as below>>
first
second
third
i wrote this code
import java.nio.*;
import java.nio.charset.*;
import java.io.*;
import java.nio.channels.*;
public class CharsetDemo {
public static void main(String[] args) {
String inputfile = "samplein.txt";
try{
RandomAccessFile inf = new RandomAccessFile( inputfile, "r" );
long leninf=inf.length();
debug("leninf:"+leninf);
FileChannel inc = inf.getChannel();
MappedByteBuffer mapbuf=inc.map(FileChannel.MapMode.READ_ONLY, 0,
leninf);
Charset latin1 = Charset.forName( "ISO-8859-1" );
CharsetDecoder decoder = latin1.newDecoder();
CharBuffer charbuf=decoder.decode(mapbuf);
debug("cbarraylen:"+charbuf.array().length);
for(char i:charbuf.array()){
System.out.print(i+"+");
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void debug(String msg){
System.out.println(msg);
}
}
when i run this i get this output>>
leninf:20
cbarraylen:20
f+i+r+s+t+
+
+s+e+c+o+n+d+
+
+t+h+i+r+d+
i have 2 doubts,
there are total 16 characters and 2 newline chars.Then how is it that
the length of RandomAccessFile and charbuffer array 20?
I am wondering how the + before s in 'second' is printed. the +
between 'f+i+r+s+t+' and '+s+e+c+o+n+d+' must be printed when
newline character is encountered by the for loop's i variable.But i
can't make out where the extra + (before s) is coming from
can someone make it clear?
jim
i tried using nio.charset classes for decoding contents of a text file
The textfile 'samplein.txt' has 3 lines as below>>
first
second
third
i wrote this code
import java.nio.*;
import java.nio.charset.*;
import java.io.*;
import java.nio.channels.*;
public class CharsetDemo {
public static void main(String[] args) {
String inputfile = "samplein.txt";
try{
RandomAccessFile inf = new RandomAccessFile( inputfile, "r" );
long leninf=inf.length();
debug("leninf:"+leninf);
FileChannel inc = inf.getChannel();
MappedByteBuffer mapbuf=inc.map(FileChannel.MapMode.READ_ONLY, 0,
leninf);
Charset latin1 = Charset.forName( "ISO-8859-1" );
CharsetDecoder decoder = latin1.newDecoder();
CharBuffer charbuf=decoder.decode(mapbuf);
debug("cbarraylen:"+charbuf.array().length);
for(char i:charbuf.array()){
System.out.print(i+"+");
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void debug(String msg){
System.out.println(msg);
}
}
when i run this i get this output>>
leninf:20
cbarraylen:20
f+i+r+s+t+
+
+s+e+c+o+n+d+
+
+t+h+i+r+d+
i have 2 doubts,
there are total 16 characters and 2 newline chars.Then how is it that
the length of RandomAccessFile and charbuffer array 20?
I am wondering how the + before s in 'second' is printed. the +
between 'f+i+r+s+t+' and '+s+e+c+o+n+d+' must be printed when
newline character is encountered by the for loop's i variable.But i
can't make out where the extra + (before s) is coming from
can someone make it clear?
jim