/* 履歴: NO 日付 内容 001 2021.04.26 新規作成 */ package com.galaxygoby ; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; /** *
*
クラス概要: *
共有メモリ作業領域サイズ算出 *
*/ public class ShmSizeSet { /** タブコード */ private static final String TAB_CODE = "\t"; /** コメント行 */ private static final String COMMENT_LINE = ";"; /** 環境名 */ private static final String SHM_ENV_NAME = "SHM_ENV_NAME"; /** 置換文字列環境名 */ private static final String REPLACE_SHM_ENV_NAME = "\\$\\{SHM_ENV_NAME\\}"; /** *
*
共有メモリ作業領域サイズ算出メイン *
* @param args 起動時パラメータ [0]:Table.defパス名 [1]:共有メモリID */ public static void main(String[] args) { int status = 0; // パラメータ指定なしの検索確認 if (args.length == 2) { ShmSizeSet instance = new ShmSizeSet(); status = instance.checkWorkSize(args); } else { status = 100; } System.exit(status); } /** *
*
共有メモリ作業領域サイズチェック *
* @param args 起動時パラメータ [0]:Table.defパス名 [1]:共有メモリID * @return チェック結果 */ private int checkWorkSize(String[] args) { String fileName = args[0]; String shmgId = args[1]; BufferedReader brTableDef = null; BufferedReader brTsv = null; int maxRows = 0; int maxColumns = 0; int maxColSize = 0; int ret = 0; try { String envWork = System.getenv("GG_CHARSET"); String ShmEnvName = System.getenv(SHM_ENV_NAME); if (envWork == null) { brTableDef = new BufferedReader( new InputStreamReader(new FileInputStream(fileName))); } else { brTableDef = new BufferedReader(new InputStreamReader( new FileInputStream(fileName), envWork)); } String inBufTableDef = ""; String inBufTsv = ""; String[] sptabStr = null; for (; (inBufTableDef = brTableDef.readLine()) != null;) { sptabStr = inBufTableDef.split(","); // コメント行のチェック if (COMMENT_LINE.equals(sptabStr[0].substring(0, 1))) { continue; } // 共有メモリグループのチェック if (!shmgId.equals(sptabStr[2])) { continue; } brTsv = null; if (ShmEnvName != null && ShmEnvName.length() > 0) { // 環境名で置換 sptabStr[4] = sptabStr[4].replaceFirst(REPLACE_SHM_ENV_NAME, ShmEnvName); } if (envWork == null) { brTsv = new BufferedReader( new InputStreamReader(new FileInputStream(sptabStr[4]))); } else { brTsv = new BufferedReader(new InputStreamReader( new FileInputStream(sptabStr[4]), envWork)); } // 列数 int row = 0; // 行数 int col = 0; // データサイズ int colSize = 0; String workStr = ""; for (; (inBufTsv = brTsv.readLine()) != null;) { row++; sptabStr = inBufTsv.split(TAB_CODE); // 列数の算出 if (sptabStr.length > col) { col = sptabStr.length; } // データサイズの算出 for (int i = 0; i < sptabStr.length; i++) { int length = getByteLength(sptabStr[i], envWork); if (length > colSize) { colSize = length; // workStr = sptabStr[i]; } } } if (brTsv != null) { brTsv.close(); brTsv = null; } if (row > maxRows) { maxRows = row; } if (col > maxColumns) { maxColumns = col; } if (colSize > maxColSize) { maxColSize = colSize; } } System.out.println(shmgId + " " + maxRows + " " + maxColumns + " " + maxColSize); } catch (Exception e) { e.printStackTrace(); ret = 100; } finally { if (brTsv != null) { try { brTsv.close(); brTsv = null; } catch (IOException e) { } } if (brTableDef != null) { try { brTableDef.close(); brTableDef = null; } catch (IOException e) { } } } return ret; } /** *
*
バイト数取得 *
* @param str 対象文字列 * @param charset キャラセット * @return バイト数 */ private int getByteLength(String str, String charset) { if (charset == null) { return str.getBytes().length; } else { return str.getBytes(Charset.forName(charset)).length; } } }