1 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 20:17:08.87 ID:N8MsK2gr0.net] Java初心者のためのスレッドです。 ※前スレ Java入門・初心者質問スレ Part.7 mevius.5ch.net/test/read.cgi/tech/1515549964/ VIPQ2_EXTDAT: checked:vvvvvv:1000:512:----: EXT was configured
1012 名前:デフォルトの名無しさん [2019/02/21(木) 05:41:02.41 ID:jvb9Tzci0.net] ;打てば抜けられるときあるよな 抜けられないときもあるけど
1013 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 17:34:53.91 ID:SR0wFFcv0.net] グーグルのスプレッドシートをAPIとjavaで読み書きしてるのですが、 シートの行数が2万行とか3万行になると、読み込みに時間がかかって Timeout 例外になります。 ググってその対処法を見つけたんですが、ちゃんと動作
1014 名前:してくれません。何が悪いのか分かりませんか? デフォルトのタイムアウトは20秒くらいで、60秒くらいに設定しても変化ありません。 https://stackoverflow.com/questions/46999143/how-to-set-timeout-for-google-client-spreadsheet-api こっちも参考になるかもしれません。 https://stackoverflow.com/questions/29518231/sockettimeoutexception-read-timed-out-on-insert-to-google-drive-is-it-retryab https://developers.google.com/api-client-library/java/google-api-java-client/errors [] [ここ壊れてます]
1015 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 19:25:26.84 ID:9TadMKc3a.net] >>972 変化がないってことは変わらず20秒でタイムアウトになるって意味? あと何が悪いのか分からないと言われても、実際に書いたコードを見せてもらわないことにはどうにもならん
1016 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 19:39:21.87 ID:SR0wFFcv0.net] >>973 自分のコードはこんな感じです。 private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); public static Sheets getSheetsService() throws IOException, GeneralSecurityException { final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, setTimeout(getCredentials(HTTP_TRANSPORT))) .setApplicationName(APPLICATION_NAME) .build(); } private static HttpRequestInitializer setTimeout(final HttpRequestInitializer initializer) { return request -> { initializer.initialize(request); request.setReadTimeout(60000); }; } デバッガでトレースしてもラムダ式の中のコードが実行されないし、相変わらず20秒でタイムアウトになります。
1017 名前:デフォルトの名無しさん [2019/02/21(木) 19:42:18.83 ID:fprmeCB00.net] >>974 httpRequest.setConnectTimeout(3 * 60000); // 3 minutes connect timeout これ入れてもNG?
1018 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 19:46:38.87 ID:SR0wFFcv0.net] >>975 同じです。そっちのコードも試しました。 5000行くらいだとスムーズに読んでくれるんで、シートをいくつも作ってそこに5000行ずつ分割した上で読んだりしてるんですけど、 すごく手間だし、シートのある列がどこまで埋まってるか知りたいなんて時はそういうこともできないので困ってます。
1019 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 20:18:27.97 ID:9TadMKc3a.net] >>976 携帯だから試せないけど、>>974 のコードに>>975 のを加えて両方書いてもダメ?
1020 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 20:29:20.31 ID:bp6QexpC0.net] ラムダの中が実行されないなら渡し方が違うんでね
1021 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 20:31:04.28 ID:SR0wFFcv0.net] >>977 private static HttpRequestInitializer setTimeout(final HttpRequestInitializer initializer) { return request -> { initializer.initialize(request); request.setConnectTimeout(60000); request.setReadTimeout(60000); }; これでやってみたけどダメでした。
1022 名前:デフォルトの名無しさん [2019/02/21(木) 21:19:34.16 ID:Neuw5rL80.net] >>966 Return と書いてあるシールでも貼っときなさい。
1023 名前:デフォルトの名無しさん [2019/02/21(木) 21:27:18.64 ID:lsmx9sV60.net] >>980 リターンキーは左下に行くという意味で、戻るわけではありません。
1024 名前:デフォルトの名無しさん [2019/02/21(木) 23:33:38.23 ID:fprmeCB00.net] >>979 ちょっと覗いてみたけど NetHttpTransport.buildRequest ・ConnectionFactoryでconnectionを作成 ・NetHttpRequestを作成 # setTimeoutがあるけど呼び方がわからぬ って感じだった HttpRequestInitializerを呼び出すのはHttpTransportだと思うんだけど どこで呼び出してるのかよくわからんかった ConnectionFactoryを指定してみたりとか final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport.Builder() .trustCertificates(GoogleUtils.getCertificateTrustStore()) .setConnectionFactory(new DefaultConnectionFactory() { @Override public HttpURLConnection openConnection(URL url) throws IOException { HttpURLConnection
1025 名前:con = super.openConnection(url); con.setReadTimeout(1000000); con.setConnectTimeout(1000000); return con; } }) .build(); JVMの設定を入れてみたりとか System.setProperty("sun.net.client.defaultConnectTimeout", "100000"); System.setProperty("sun.net.client.defaultReadTimeout", "100000"); Javaの起動時にJVMのオプション指定したりとか試してみてはどうだろ [] [ここ壊れてます]
1026 名前:デフォルトの名無しさん mailto:sage [2019/02/22(金) 05:42:45.85 ID:p3Rb6+Rra.net] まだ解決してないならタイムアウトしてる部分のソース見るのが一番早いかな
1027 名前:デフォルトの名無しさん mailto:sage [2019/02/22(金) 08:02:33.12 ID:2zA+k7LF0.net] >>982 コードまで書いてもらってありがとうございます。朝一で試してみたんですが、残念ながら変わりませんでした。 ともあれありがとうございました。
1028 名前:デフォルトの名無しさん mailto:age [2019/02/22(金) 08:51:44.48 ID:Iun5aGGoM.net] >>984 タイムアウトで例外投げられてるなら スタックトレース出力されてない? スタックトレースを見ればどのオブジェクトが関わってるか わかるんじゃないかな それ貼ってもらえれば
1029 名前:デフォルトの名無しさん mailto:sage [2019/02/22(金) 12:29:35.43 ID:2zA+k7LF0.net] >>985 エラーはこんなのが出ます。 Exception in thread "main" java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:171) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) at sun.security.ssl.InputRecord.read(InputRecord.java:503) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983) at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:940) at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
1030 名前:デフォルトの名無しさん mailto:sage [2019/02/22(金) 12:34:28.93 ID:2zA+k7LF0.net] これで全部ではなくて、まだもう半分あるんですが、書き込もうとしたらNGワード禁止と言われて書き込めませんでした。
1031 名前:デフォルトの名無しさん mailto:sage [2019/02/22(金) 12:45:13.44 ID:2zA+k7LF0.net] 一番下から1行ずつ消しながら書き込めないかやってみます。 at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) at java.io.BufferedInputStream.read(BufferedInputStream.java:345) at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:735) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1587) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347) at com.google.api.client.http.javanet.NetHttpResponse.<init>(NetHttpResponse.java:37) at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:105) at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
1032 名前:デフォルトの名無しさん mailto:sage [2019/02/22(金) 21:43:24.52 ID:2zA+k7LF0.net] HttpRequestInitializer をググってたらこういうページに行き当たりまして、 https://developers.google.com/api-client-library/java/google-http-java-client/reference/1.19.0/com/google/api/client/http/HttpRequestInitializer そこに書いてあった DisableTimeout というクラスを組み込んでみたんですが、今のところ動作してるみたいです。 public static Sheets getSheetsService() throws IOException, GeneralSecurityException { class DisableTimeout implements HttpRequestInitializer { public void initialize(HttpRequest request) throws IOException { request.setConnectTimeout(0); request.setReadTimeout(0); } } final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, new DisableTimeout()) .setApplicationName(APPLICATION_NAME) .build(); } これで35,000行のファイルを2、3秒で読んでしまうので、さすがに嘘だろうと思って、読み込んだ文字列をファイルに書き出してみたんですが、 確かに読めているみたいです。実際のところこれまで何十秒もかかっていた読み込みが、これでそんな短時間になるというのはちょっと理解不能です。
1033 名前:デフォルトの名無しさん mailto:sage [2019/02/22(金) 22:32:47.11 ID:p3Rb6+Rra.net] 最初のコードと比べるとHttpRequestInitializerをnewしてるところが違うように見えるな
1034 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 14:33:18.47 ID:jlfdOyKu0.net] えー皆さん大変申し訳ありません。>>989 は間違いです。 ついでに最初に出したstackoverflowのコードはちゃんと動きます。 呼び出し側の自分のコードが原因でした。すごく馬鹿な間違いをしてまして、恥ずかしくて書けないような初歩的な
1035 名前:ミスでした。 ごめんなさい。 [] [ここ壊れてます]
1036 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 16:33:08.81 ID:aHdAp3lda.net] ワロタw 解決してよかったね
1037 名前:デフォルトの名無しさん [2019/02/28(木) 16:44:17.92 ID:imPJLa31d.net] Arrays.streamにchar[]が無いのってオラクルの嫌がらせか何かですか?
1038 名前:デフォルトの名無しさん [2019/03/02(土) 03:41:49.15 ID:V02tz52S0.net] あ、valueOfしてcharsでいいのか
1039 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 23:52:36.89 ID:MEPSmozW0.net] canvasのハックの仕方を教えてください 判断するための状態を読み取りたいです
1040 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 17:27:33.32 ID:l8LfQfs2d.net] printwriterで最後の数行が書き込まれなくて困ってたけどclose()する前にflush()したら解決した こういうこともあるのか
1041 名前:デフォルトの名無しさん [2019/03/09(土) 19:55:15.69 ID:ACok0wnJ0.net] >>996 closeするときにflushを呼ばない行儀の悪いクラスを PrintWriterでラッピングしてしまったのね なんてクラスよ、晒しちゃいなよ!
1042 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 22:17:07.64 ID:SBBakmG00.net] メッセージって業務クラスにベタ書きする?普通 メッセージのプロパティかそれ用のクラスにまとめるでしょ?? 業務クラスにべた書きってありえなくないですか?
1043 名前:デフォルトの名無しさん [2019/03/09(土) 23:57:52.40 ID:ACok0wnJ0.net] ケースバイケース
1044 名前:デフォルトの名無しさん [2019/03/09(土) 23:59:48.81 ID:ACok0wnJ0.net] Java入門・初心者質問スレ Part.9 mevius.5ch.net/test/read.cgi/tech/1552143555/
1045 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 275日 3時間 42分 40秒
1046 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています