热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

geoserverrest导入shape文件错误

使用rest接口导入shp文件时出错,java.io.ioexception:currentfidindexisnull,nextmustbecalledbeforewrite()

使用rest接口导入shp文件时出错,
java.io.ioexception: current fid index is null, next must be called before write(),
网上找了一下,找到了一篇文章,地址http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E7%9A%84/14090.shtml

自己又仔细研究了一下出错的地方的源码,先贴一下在讲原因

org.geotools.data.shapefile.dbf.DbaseFileWriter
public String getFieldString(int size, String s) {
try {
buffer.replace(0, size, emptyString);
buffer.setLength(size);
// international characters must be accounted for so size != length.
int maxSize = size;
if (s != null) {
buffer.replace(0, size, s);
int currentBytes =
s.substring(0, Math.min(size, s.length()))
.getBytes(charset.name())
.length;
if (currentBytes > size) {
char[] c = new char[1];
for (int index = size - 1; currentBytes > size; index--) {
c[0] = buffer.charAt(index);
String string = new String(c);
buffer.deleteCharAt(index);
currentBytes -= string.getBytes().length;
maxSize--;
}
} else {
if (s.length() maxSize = size - (currentBytes - s.length());
for (int i = s.length(); i buffer.append(' ');
}
}
}
}
buffer.setLength(maxSize);
return buffer.toString();
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("This error should never occurr", e);
}
}

以下是个人分析,可能有不对的地方,见谅:
主要原因是有中文字符引起的
dbf文件中是按自己存储的,而一个汉字,GBK是2个字节,UTF-8是三个字节,StringBuffer 里的charAt是按字符算的,geoserver rest上传文件的过程,不是直接按字节保存的,而是读取shape的全部内如,包括dbf,然后再写入到一个新的shape文件中。

如果遇到String类型的属性,会调用 getFieldString(int size,String s)方法,截取调多余的字节,下面举一个真实的例子,size 20,s是"福建省福州市罗源县",UTF-8编码转换为字节是27,27大于字段长度20,需要截取出前20个字符来。
但是方法内部是用的从末尾删除的方法,具体看下面图片。
geoserver rest 导入shape文件错误

大家可以仔细研究一下代码,总结一下:
如果是UTF-8编码,则字段长度必须设计为value长度的3倍
如果是GBK边框,则字段长度必须设计为value长度的2倍
,否则的话如果存储的中文字段getBytes之后超过字段的length,则会报错。

java.lang.StringIndexOutOfBoundsException: String index out of range: 19

不知道修改下代码,强行把多余的字符写入到dbf文件中是否会报错,因为这个本来就是存储在dbf文件中的,但是是从其他软件中导出的,不是用geotools生成的。

如果哪位大神知道,请留言解释一下。


推荐阅读
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 一、Tomcat安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat8.0\webapps二、Tomcat8.0配置多个端口,其实也就是给T ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
author-avatar
无谓__
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有