java输出流关流疑问,以下这个程序的in和out是不是要关闭?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java输出流关流疑问,以下这个程序的in和out是不是要关闭?相关的知识,希望对你有一定的参考价值。

/**
标准IO
java.lang.System类中提供以下三个静态常量:
static final InputStream in
功能:“标准”输入流,流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
static final PrintStream out
功能:“标准”输出流,此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
static final PrimeStream err
功能:“标准”错误输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或者用户指定的另一个输出目标。
以上3种流都是java虚拟机在启动应用程序自动创建的。
static void setIn(InputStream in):对标准输入流重定向
static void setOut(PrintStream out):对标准输出流重定向
static void serErr(PrintStream err):对标准错误输出流重定向
*/
import java.io.*;
public class StandardIORedirect
public static void main(String[] args)throws IOException
PrintStream console = System.out;
BufferedInputStream in = new BufferedInputStream(new FileInputStream

("E:\\JavaPractice\\StandardIORedirect.java"));
PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream

("E:\\JavaPractice\\StandardIORedirect.txt")));
System.setIn(in); //对输出流重定向
System.setOut(out);
System.setErr(out);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
while((s=br.readLine())!=null) //从BufferedReader类中读取一行数据
System.out.println(s);

out.close();
System.setOut(console);


in和out是否要关闭?

参考技术A 当然要关闭啊。追问

先关哪个?in,br,out?

追答

这个没有严格规定。只要保证可以正常关闭就好。

本回答被提问者采纳
参考技术B in和out都需要关闭,当然也需要保证在异常的情况下也关闭 参考技术C 必须要关闭 参考技术D 最好关闭,当然时间长了不用,java垃圾回收器也会给回收的。不过在回收前的这段时间就可能有性能问题,尤其硬件资源比较紧缺的时候

关于Verilog hdl 中循环语句forever编译错误的疑问。

`timescale 1us/1us
module clocktest;
reg Clk_in,Rst_in,S1_in,S2_in;
wire Spk_out;
wire[6:0] Display_out;
wire[2:0] Sel_out;
parameter HALF_PERIOD=50;
//产生10KHZ 时钟
initial
begin
Clk_in=0;
forever #HALF_PERIOD Clk_in=~Clk_in; 第十三行
end
//产生复位信号
initial
begin
Rst_in=1;
#(2*HALF_PERIOD) Rst_in=0;
#(10*HALF_PERIOD) Rst_in=1;
end
//产生调节小时信号
initial
begin
S1_in=1;
#(35000*HALF_PERIOD) S1_in=0;
#(60000*HALF_PERIOD) S1_in=1;
end
//产生调节分钟信号
initial
begin
S2_in=1;
#(95000*HALF_PERIOD) S2_in=0;
#(60000*HALF_PERIOD) S2_in=1;
end
clock t(.Spk(Spk_out),.Display(Display_out),.Sel(Sel_out),
.Clk(Clk_in),.Rst(Rst_in), .S1(S1_in),.S2(S2_in));
endmodule
编译后出现
Error (10119): Verilog HDL Loop Statement error at clocktest.v(13): loop with non-constant loop condition must terminate within 250 iterations
Error: Can't elaborate top-level user hierarchy
Error: Quartus II Analysis & Synthesis was unsuccessful. 2 errors, 0 warnings

Verilog 这个语言有两个部分,一部分是可综合的用来生成电路,一部分是不可综合的用来写testbench(测试脚本)。你贴的程序是不能综合的那部分,是testbench。不能综合的那部分非常的接近C语言,适合写测试文件。
我在网上看了一下,你是参考的《基于Verilog HDL设计的多功能数字钟》这篇论文
你贴的这部分代码是modelsim调用的仿真测试文件,不是用来综合的。
文献中“测试模块源代码如下:”这句话以上的代码是用来综合的。你先了解一下verilog的语法,以及quartus和modelsim的使用。然后看这篇论文你就明白了,才9月离答辩还远吧。
你要是真正对FPGA感兴趣,建议认真学一下。很好的一个范例。麻雀虽小,五脏俱全。
参考技术A forever #HALF_PERIOD Clk_in=~Clk_in; 把HALF_PERIOD直接用个常数替代看看。不然还是直接用always好了 参考技术B 首先,你这样写来进行仿真是没有问题的,只是quartus进行编译的时候是一起进行综合的,这个forever一直循环执行是不能综合的。就算改成了for(i=。。。。)进行有条件的循环时,quartus编译时analysis可以通过但这个TB文件的synthesis仍然不会通过的。 建议你使用VCS或modelsim等仿真工具进行仿真。

以上是关于java输出流关流疑问,以下这个程序的in和out是不是要关闭?的主要内容,如果未能解决你的问题,请参考以下文章

IO简介

IO简介

编写Java应用程序,使程序在屏幕上打印输出以下字符图形

编写一个JAVA程序 输入自己的姓名和年龄并输出 怎么写

急!!!!!java System.out.println()输出规则!!!!!

重定向标准输入/输出