Пробу двоичный файл PGM выглядит следующим образом:Использование DataInputStream после BufferedReader
P5
# This is a comment
10 10
255
#image intensity information in bytes that I am unable to copy paste here
как
Когда я пытаюсь прочитать файл, используя следующий код:
import java.io.*;
public class Pgm_reader2 {
public static void main(String[] args) throws IOException {
try {
FileInputStream inRaw = new FileInputStream("A.pgm");
DataInputStream dis = new DataInputStream(inRaw);
int i = 0;
while(i < 4){
System.out.println(dis.readLine());
i++;
}
while(dis.available() != 0){
System.out.print(dis.readUnsignedByte() + " ");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
Он отлично работает и дает следующий выход:
P5
# This is a comment
10 10
255
0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0
но это показывает, что метод DataInputStream.readLine()
устарел. Таким образом, чтобы избежать с помощью этого метода я попытался с помощью метода BufferedReader.readLine()
следующим образом:
import java.io.*;
public class Pgm_reader2 {
public static void main(String[] args) throws IOException {
try {
FileInputStream inRaw = new FileInputStream("A.pgm");
DataInputStream dis = new DataInputStream(inRaw);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inRaw));
int i = 0;
while(i < 4){
System.out.println(bufferedReader.readLine());
i++;
}
while(dis.available() != 0){
System.out.print(dis.readUnsignedByte() + " ");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
И выход изменен:
P5
# This is a comment
10 10
255
, и кажется, что второй while
цикл т.е.
while(dis.available() != 0){
System.out.print(dis.readUnsignedByte() + " ");
}
не работает.
В чем может быть причина?
Я попытался с помощью большего размера т.е. 400x400 вместо изображения 10x10 изображения,
и попытался скопировать байты из одного изображения и вставить их в новый файл, используя следующий код:
import java.io.*;
public class Pgm_reader2 {
public static void main(String[] args) throws IOException {
try {
FileInputStream inRaw = new FileInputStream("A.pgm");
FileOutputStream outRaw = new FileOutputStream("B_test.pgm");
DataInputStream dis = new DataInputStream(inRaw);
DataOutputStream dos = new DataOutputStream(outRaw);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inRaw));
String line = null;
int i = 0;
while(i < 4){
line = bufferedReader.readLine();
dos.writeBytes(line);
dos.writeBytes("\n");
i++;
}
int intbyte = 0;
while(dis.available() != 0){
intbyte = dis.readUnsignedByte();
dos.writeByte(intbyte);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
и выходное изображение вышло так:
Если я использую DataInputStream.readLine()
во всем коде, тогда выходное изображение будет таким же, как и входное изображение. Как это происходит?
Не могли бы вы использовать 'DataInputStream # readUTF()'? –
@VinceEmigh Я пытался использовать его только сейчас, и он дает исключение 'java.io.EOFException' – cnova
разве вы не сказали, что хотите использовать буферизованный читатель? то зачем смешивать два? – gpasch