很可能是因为来自DataInputStream的弃用方法readLine()。正如其注释中所述

此方法无法将字节正确转换为字符。从JDK 1.1开始,读取文本行的首选方法是通过BufferedReader.readLine()方法。使用DataInputStream类读取行的程序可以通过替换表单的代码转换为使用BufferedReader类:

DataInputStream d = new DataInputStream(in);

有:

BufferedReader d

= new BufferedReader(new InputStreamReader(in));

当我根据这个建议改变你的程序时,它对我有用(我做了一些其他的改动:

(更新为处理PGM的P2和P5口味)

public static void main(String args[]) throws Exception {

try {

InputStream f = ClassLoader.getSystemClassLoader().getResourceAsStream("lena.pgm");

BufferedReader d = new BufferedReader(new InputStreamReader(f));

String magic = d.readLine(); // first line contains P2 or P5

String line = d.readLine(); // second line contains height and width

while (line.startsWith("#")) {

line = d.readLine();

}

Scanner s = new Scanner(line);

int width = s.nextInt();

int height = s.nextInt();

line = d.readLine();// third line contains maxVal

s = new Scanner(line);

int maxVal = s.nextInt();

byte[][] im = new byte[height][width];

int count = 0;

int b = 0;

try {

while (count < height*width) {

b = d.read() ;

if ( b < 0 )

break ;

if (b == '\n') { // do nothing if new line encountered

}

// else if (b == '#') {

// d.readLine();

// }

// else if (Character.isWhitespace(b)) { // do nothing if whitespace encountered

// }

else {

if ( "P5".equals(magic) ) { // Binary format

im[count / width][count % width] = (byte)((b >> 8) & 0xFF);

count++;

im[count / width][count % width] = (byte)(b & 0xFF);

count++;

}

else { // ASCII format

im[count / width][count % width] = (byte)b ;

count++;

}

}

}

} catch (EOFException eof) {

eof.printStackTrace(System.out) ;

}

System.out.println("Height=" + height);

System.out.println("Width=" + height);

System.out.println("Required elements=" + (height * width));

System.out.println("Obtained elements=" + count);

}

catch(Throwable t) {

t.printStackTrace(System.err) ;

return ;

}

}

java pgm_用Java读取pgm文件相关推荐

  1. Java的marven工程读取resources文件,并打可执行的jar

    Java的maven工程读取resources文件,并打可执行的jar 文章目录 Java的maven工程读取resources文件,并打可执行的jar 如何读取resources文件 maven如何 ...

  2. JAVA实现环形缓冲多线程读取远程文件

    2019独角兽企业重金招聘Python工程师标准>>> 如果用HttpURLConnection类的方法打开连接,然后用InputStream类获得输入流,再用BufferedInp ...

  3. java wav 波形_java读取wav文件(波形文件)并绘制波形图的方法

    本文实例讲述了java读取wav文件(波形文件)并绘制波形图的方法.分享给大家供大家参考.具体如下: 因为最近有不少网友询问我波形文件读写方面的问题,出于让大家更方便以及让代码能够得到更好的改进,我将 ...

  4. java xml 反射_Java 读取XML文件以及Java 的反射机制实现

    Java 读取XML文件以及Java 的反射机制实现 代码部分 import java.io.File; import javax.xml.parsers.DocumentBuilder; impor ...

  5. java classpath 遍历_Java 读取JAR文件信息

    Java 读取JAR文件信息 为什么想到读取JAR文件的信息 查看spring 资源处理,查找多个资源classpath*,会去寻找jar包中的内容,因此会出现读取jar包中的文件或者读取文件夹中的文 ...

  6. Java通过javacsv实现读取csv文件数据

    目录 1.添加依赖 2.测试的csv文件 3.实际调用代码 4.返回的数据格式 1.添加依赖 <!--csv文件操作--> <dependency><groupId> ...

  7. Java使用GeoTools轻松读取shapefile文件内容

    日常GIS开发中难免会将一些shapefile文件数据读取存入数据库中,很多人第一想到的就是使用GeoTools操作和显示地图的开源Java 代码库. 生活捉弄人,因为项目需要对于从来没有做过GIS相 ...

  8. java read出错_java读取txt文件时,错误的把txt内容读取了两遍

    package标准化模拟考试;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;importjav ...

  9. java获取音乐_Java读取MP3文件的信息(歌曲名,歌手...)

    还记得之前写一款Android播放软件时,为了让APP获得MP3音乐文件的相关信息,上网找了很多Java库.搞的APP满身赘肉.后来我研究了一下MP3文件的结构后发现,获取MP3文件信息根本不需要什么 ...

  10. java读取 png_如何让java的ImageBuffer正确读取PNG文件?

    出于某种原因,使用ImageBuffer和ImageIO打开一些PNG文件不起作用.这里有一些我正在使用的代码可以很好地调整大小/裁剪JPG: BufferedImage image = ImageI ...

最新文章

  1. 忘记Rxjava吧,你应该试试Kotlin的协程
  2. sangerbox平台使用(六)富集分析
  3. 【机器学习基础】数学推导+纯Python实现机器学习算法1:线性回归
  4. Boost::context模块callcc的斐波那契测试程序
  5. python实现redis分布式锁
  6. java工程加包_Java工程中添加依赖jar包不起作用问题总结
  7. Java可靠性测试fit_Java ParagraphVectors.fit方法代码示例
  8. 01-二维数组中的查找
  9. oracle创建表(并且实现ID自增)
  10. SQLserver nText和varchar 不兼容
  11. 「leetcode」617. 合并二叉树:【三种递归】【一种迭代】详解
  12. Java httpClient 发送http请求
  13. java基础入门(完整详细版)
  14. Linux中scp报 not a regular file错误解决方案
  15. Java混元功法_陈式太极心意混元 入门功法---太极内功 1
  16. jks文件转换成ctr,key文件
  17. 服务器网站崩溃怎么解决
  18. np.power与np.linalg.inv
  19. 团队-中国象棋游戏-设计文档
  20. android线刷软件,android线刷一般用什么软件?哪一个好用一些?

热门文章

  1. 微分中的dx和delta x
  2. 计算机仿真撤稿,LOL云顶之弈11.5天神裁决天使阵容攻略 新版本裁决天使运营思路...
  3. bigdecimal负数变正数_Java中BigDecimal的8种舍入模式
  4. 【Win7开启DMA】
  5. 洛谷 P4200 千山鸟飞绝平衡树
  6. 波司登 × 阿里云 × 奇点云:教科书式的数智化转型实践
  7. 申请license激活F5-LTM步骤
  8. isis学不到looback口的路由_光纤猫接D-Link无线路由器,怎么设置上网
  9. 在启动时在Raspberry Pi上运行程序的五种方法
  10. python 英语词汇_【我爱背单词】用Python提炼3000英语新闻高频词汇