質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Q&A

解決済

1回答

9387閲覧

InputStreamオブジェクトのcloseが行われるのかが知りたい

curveworks

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

0グッド

0クリップ

投稿2018/06/25 14:47

編集2018/06/26 00:50

知りたいこと

某システムのJavaのサーブレット側の既存処理の一部で、
InputStreamオブジェクトを生成している処理があるのですが、
該当ソースコードにて、InputStreamオブジェクトがcloseされるのかが知りたいです。
※すみませんが、実機での確認がなかなかできない環境しかないため、お試し実行ができていません。
__
ぱっと見、InputStreamオブジェクトはclose()を実行していない為、
InputStreamオブジェクトもcloseされていないと思いましたが、
最終的に作成しているConnectionオブジェクトがcloseしているので、
もしかしてこの時点でcloseされているのでは?と思った次第です。
よろしくお願いいたします。
__

該当のソースコード

Java

1ClassLoader cl = Thread.currentThread().getContextClassLoader(); 2InputStream is = cl.getResourceAsStream("〜.properties"); 3Properties prop = new Properties(); 4prop.load(is); 5Context ct = new InitialContext(); 6DataSource ds = (DataSource)ct.lookup(prop.getPoperty("JNDIリソース名")); 7// DB接続 8Connection cn = ds.getConnection(); 9~省略~ 10cn.close();

補足情報

OS: Red Hat Enterprise Linux Server release 6.5
JRE: 1.7.0_45

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/25 15:16

しかし RHEL 4/JAVA TIGER か・・・
curveworks

2018/06/26 00:51

環境のバージョン誤りと追記を行いました
guest

回答1

0

ベストアンサー

GC(ガベコレ)が発生したときにとじられるやつですね(やってはいけないこと)

追記

参考資料としてほぼ同様の質問の回答
(今回とは InputStream がちがうので自分でさかのぼってみてください。大体は同じく finalize で閉じている )

stackoverflow.com 引用

/** * Ensures that the <code>close</code> method of this file input stream is * called when there are no more references to it. * * @exception IOException if an I/O error occurs. * @see java.io.FileInputStream#close() */ protected void finalize() throws IOException { if ((fd != null) && (fd != FileDescriptor.in)) { /* if fd is shared, the references in FileDescriptor * will ensure that finalizer is only called when * safe to do so. All references using the fd have * become unreachable. We can call close() */ close(); } }

投稿2018/06/25 15:15

編集2018/06/26 04:02
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

curveworks

2018/06/26 03:41

回答ありがとうございます。 やはりcloseされないのですね…。 ところで、InputStreamはfinalizeメソッドによるclose処理が実装されていないので、GCが発生してもcloseされないと思っていたのですが、それは認識違いでしょうか?
退会済みユーザー

退会済みユーザー

2018/06/26 04:15

※ 全部の InputStream じゃなく 大体のですよ( 知りうる限りでは一部は実装してない )
curveworks

2018/06/26 15:47

あー、「InputStream」クラスのことではなくて「〜InputStream」クラスのことですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問