2021.10.26,内容:标准输入流

本文详细讲解如何在Java中使用System.out.println进行基本的字符串输出,包括方法调用、参数拼接及空行打印,为初学者提供实践指导。

打印输出到“标准输出流”(即控制台窗口)是一件非常简单的事情。

 在我们学习的java的第一个程序时,我们已经接触了标准输出流,并在控制台中输出了“Hello World!”。

{
System.out.println(“Hello World!”);
}
在这里,使用了System.out对象并调用了它的println方法并传递给他一个字符串参数(“hello world”)。println方法可以将传递给它的参数显示在控制台上。每次调用println都会在新的一行显示输出(如果想在输出后不换行,可以使用println,如System.out.print(“hello”);)。

 补充:

         1.调用println方法也可以不传递参数,此时,将打印一个空行。

         2.括号内可以使用“+”拼接字符串,实际上我们经常这么使用。     

System.out.println("Hello"+"World!");//在控制台中输出Hello world!
System.out.println("H"+"e"+"l"+"l"+"o");//在控制台中输出Hello
<think> 我们正在处理一个Tomcat环境下读取Nacos配置时出现的YAML解析错误。错误信息是:`org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1`。 这个错误通常是由于字符编码问题引起的,即YAML解析器在读取配置文件时遇到了非预期的字符编码,导致无法正确解析。 分析: 1. `MalformedInputException`是Java NIO包中字符集解码时抛出的异常,表示输入字节序列对于给定的字符集是无效的。 2. 错误信息中`Input length = 1`说明在某个位置有一个字节无法被正确解码。 3. 问题可能出现在Nacos配置文件的字符编码上,例如配置文件包含特殊字符或者使用了不兼容的编码。 排查步骤: 1. 确认Nacos配置文件的编码格式: - Nacos默认使用UTF-8编码。请确保你的配置文件也是以UTF-8编码保存的。 - 检查配置文件中是否包含非UTF-8字符(如特殊符号、表情符号等)。 2. 检查Tomcat的字符编码设置: - 确保Tomcat启动时使用UTF-8编码。可以在Tomcat的启动脚本(如catalina.sh或catalina.bat)中设置环境变量: ```bash export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8" ``` - 或者在IDEA中配置Tomcat的VM options:`-Dfile.encoding=UTF-8` 3. 检查配置文件内容: - 如果配置文件中包含中文或者其他非ASCII字符,确保它们是以UTF-8编码保存的。 - 可以使用十六进制编辑器检查文件头部是否有BOM(Byte Order Mark),UTF-8通常不需要BOM,但有些编辑器会添加。如果有BOM,尝试去掉。 4. 检查Nacos配置读取方式: - 确保在读取配置时指定了正确的字符编码。例如,使用Spring Cloud Alibaba Nacos Config时,默认会使用UTF-8,但如果你自定义了配置读取方式,需要确认编码设置。 5. 在代码中指定编码: - 如果你自己编写了读取配置的代码,确保在读取流时指定了编码,例如: ```java new InputStreamReader(inputStream, StandardCharsets.UTF_8); ``` 6. 检查操作系统默认编码: - 有时操作系统的默认编码不是UTF-8,这可能导致Java使用错误的编码。可以通过以下代码检查: ```java System.out.println("Default Charset: " + Charset.defaultCharset()); ``` - 如果输出不是UTF-8,则需要设置JVM参数:`-Dfile.encoding=UTF-8` 7. 检查YAML文件格式: - 确保YAML文件内容是合法的,没有语法错误。可以使用在线YAML校验工具检查。 8. 如果使用了加密配置: - 如果Nacos配置使用了加密,解密后的内容可能出现编码问题。确保解密过程没有破坏二进制数据的完整性。 9. 升级SnakeYAML版本: - 旧版本的SnakeYAML可能存在一些bug,尝试升级到最新版本。 10. 查看Nacos配置的详细内容: - 在确保安全的前提下,可以将配置内容打印出来(注意脱敏),检查是否有特殊字符。 根据以上步骤,通常可以解决字符编码问题。如果问题仍然存在,请提供更多关于你的环境信息(如Nacos配置内容片段、Nacos和Spring Cloud版本等)以便进一步分析。 相关问题: 1. 如何设置Tomcat的默认字符编码为UTF-8? 2. 如何检查文件的编码格式? 3. 如何在Java中避免字符编码问题? 4. 如何升级Spring Cloud Alibaba Nacos Config的依赖? 5. 如何解决YAML解析的其他常见错误? </think> ### Tomcat下读取Nacos配置解析失败的解决方案 出现`org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1`错误的原因是**字符编码不匹配**,导致YAML解析器无法正确读取配置内容。以下是完整的解决步骤: #### 1. **确认配置文件编码(关键步骤)** - Nacos配置文件**必须使用UTF-8编码**保存: ```bash # 使用file命令检查文件编码(Linux/Mac) file -i your-config.yml # 输出应为:your-config.yml: text/plain; charset=utf-8 ``` - **解决方案**: - 在编辑器中显式保存为UTF-8(如VSCode右下角选择编码) - 避免包含BOM头(某些编辑器添加的隐藏字符) #### 2. **配置Nacos服务端编码** - 在Nacos的`application.properties`中添加: ```properties # 强制服务端使用UTF-8编码 nacos.core.auth.plugin.nacos.token.charset=UTF-8 server.tomcat.uri-encoding=UTF-8 ``` #### 3. **检查Tomcat启动参数** - 在Tomcat启动脚本中添加JVM参数(如`catalina.sh`或IDEA的VM options): ```bash -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 ``` - 在IDEA中配置: ![IDEA编码设置](https://example.com/encoding-setting.png) *位置:Run/Debug Configurations → VM options* #### 4. **应用代码层修复** - 在读取配置的代码中显式指定编码: ```java // Spring Cloud Alibaba示例 @Bean public NacosPropertySourceBuilder nacosPropertySourceBuilder() { NacosPropertySourceBuilder builder = new NacosPropertySourceBuilder(); builder.setEncoding("UTF-8"); // 关键设置 return builder; } ``` #### 5. **验证配置文件内容** - 检查是否存在**非常规字符**: - 特殊符号(如零宽空格) - 表情符号(😊等) - 十六进制范围外的字符 - 可使用在线YAML验证工具检测语法:[YAML Lint](https://www.yamllint.com/) #### 6. **依赖库版本检查** - 确保使用兼容版本组合: | 依赖项 | 推荐版本 | |---|---| | Spring Boot | 2.6+ | | Spring Cloud Alibaba | 2021.0.5.0+ | | SnakeYAML | 1.30+ | - 在`pom.xml`中显式指定: ```xml <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.33</version> </dependency> ``` #### 7. **服务器环境检查** - 在Linux服务器执行: ```bash # 检查系统语言环境 locale # 验证结果应为: LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 ``` > **根本原因**:该错误表明YAML解析器遇到1字节长度的无效字符序列。通常由Windows系统保存的ANSI编码文件在Linux环境解析,或IDE默认编码设置错误导致[^1][^3]。 ### 相关问题 1. 如何诊断Java应用的字符编码问题? 2. Nacos配置中心的最佳实践有哪些? 3. 不同操作系统下如何统一文件编码? 4. Spring Cloud Alibaba如何实现配置热更新? 5. 如何防止YAML配置文件中的特殊字符引发解析错误? [^1]: 字符编码不匹配导致字节序列解析失败 [^2]: 配置加载过程中的上下文初始化错误 [^3]: 开发环境设置影响运行时行为
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值